在JavaScript中,获取元素位置主要有两种方式:
offsetTop
和 offsetLeft
offsetTop
和 offsetLeft
属性返回当前元素相对于其 offsetParent
节点的顶部和左侧的距离。getBoundingClientRect()
getBoundingClientRect()
方法返回元素的大小及其相对于视口的位置。// 使用 offsetTop 和 offsetLeft
var element = document.getElementById('myElement');
var top = element.offsetTop;
var left = element.offsetLeft;
// 使用 getBoundingClientRect()
var rect = element.getBoundingClientRect();
var top = rect.top;
var left = rect.left;
offsetTop
和 offsetLeft
获取的是元素相对于其 offsetParent
的位置,这个位置不会随页面滚动而改变。而 getBoundingClientRect()
获取的是元素相对于视口的位置,会随页面滚动而改变。transform
、perspective
或 filter
属性,可能会影响 offsetParent
的计算,这时 getBoundingClientRect()
可能会更准确。offsetTop
/offsetLeft
和页面的滚动位置(window.scrollY
/window.scrollX
)进行计算。getBoundingClientRect()
。function getElementPosition(element) {
var x = 0, y = 0;
while (element) {
x += element.offsetLeft - element.scrollLeft + element.clientLeft;
y += element.offsetTop - element.scrollTop + element.clientTop;
element = element.offsetParent;
}
return { x: x, y: y };
}
var position = getElementPosition(document.getElementById('myElement'));
console.log(position.x, position.y);
这个函数会递归地计算元素及其所有父元素的 offsetLeft
和 offsetTop
,从而得到元素相对于文档的绝对位置。
领取专属 10元无门槛券
手把手带您无忧上云