Javascript 如何在不使用事件的情况下获取元素的pageX和pageY

Javascript 如何在不使用事件的情况下获取元素的pageX和pageY,javascript,html,dom,Javascript,Html,Dom,在不使用e.pageX和e.pageY的情况下,任何元素的定位是否存在任何问题 检查这个 小提琴实际上是一个拙劣的尝试,我试图问什么,但我认为一个直观的例子会更好。我想知道的是,通过使用 document.getElementByID('elementID'); 或许 document.getElementsByTagName('TagName'); EDIT:虽然我在小提琴中使用了Jquery,但我希望有一个可能的解决方案只使用JavaScript。我认为offset()应该可以工作 $

在不使用e.pageX和e.pageY的情况下,任何元素的定位是否存在任何问题

检查这个

小提琴实际上是一个拙劣的尝试,我试图问什么,但我认为一个直观的例子会更好。我想知道的是,通过使用

 document.getElementByID('elementID');
或许

document.getElementsByTagName('TagName');
EDIT:虽然我在小提琴中使用了Jquery,但我希望有一个可能的解决方案只使用JavaScript。

我认为offset()应该可以工作

$(element).offset() //will get {top:.., left:....}
你可以用

document.getElementById("elementID").offsetTop;
document.getElementById("elementID").offsetLeft;
参考。它们返回相对于父元素的偏移量。如果您需要元素相对于整个身体的偏移量,则可能会变得更加棘手,因为您必须将链中每个元素的偏移量相加。
分别用于
.getElementsByTagName
,因为DOM中的每个对象都有这些属性

.getBoundingClientRect
也可以


$(“#某物”)。单击(函数(e){
var parentOffset=$(this.parent().offset();
//或者$(this.offset();如果您确实只需要当前元素的偏移量
var relX=e.pageX-parentOffset.left;
var relen=e.pageY-parentOffset.top;
});

您可以在这里找到几乎所有的jquery内容:

同:

var rect = el.getBoundingClientRect();

{
  top: rect.top + document.body.scrollTop,
  left: rect.left + document.body.scrollLeft
}

如果我理解正确:

UIEvent.PageX/PageY:相对于文档()

元素getBoundingClientRect:相对于视口。()

窗口。pageXOffset/pageYOffset:文档当前滚动的像素数。()

基于以下描述:

const PageX = (elem) => window.pageXOffset + elem.getBoundingClientRect().left
const PageY = (elem) => window.pageYOffset + elem.getBoundingClientRect().top
var rect = el.getBoundingClientRect();

{
  top: rect.top + document.body.scrollTop,
  left: rect.left + document.body.scrollLeft
}
const PageX = (elem) => window.pageXOffset + elem.getBoundingClientRect().left
const PageY = (elem) => window.pageYOffset + elem.getBoundingClientRect().top