我正在使用以下 JavaScript 函数来获取元素的绝对位置
function findPos(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (1) {
curleft += obj.offsetLeft;
if (!obj.offsetParent) {
break;
}
obj = obj.offsetParent;
}
}
}
该函数在除 IE 之外的所有浏览器中都可以正常工作。在 IE 中,它在全屏下也可以正常工作,但是当调整浏览器大小时,此方法会返回不正确的偏移量。
你能帮我解决这个问题吗
最佳答案
我建议您不要使用offsetParent/Top/Left
利用getBoundingClientRect()
功能(略有增强)。它应该具有更高的性能,因为您不必循环遍历 DOM,并且它应该跨浏览器返回正确的结果。
您的 findPos 函数将如下所示:
function findPos(obj) {
var gbcr = obj.getBoundingClientRect(),
dE = document.documentElement,
b = document.body,
scrollY = window.pageYOffset || dE.scrollTop || b.scrollTop, /* 1 */
scrollX = window.pageXOffset || dE.scrollLeft || b.scrollLeft, /* 1 */
top = gbcr.top + scrollY - dE.clientTop, /* 2 */
left = gbcr.left + scrollX - dE.clientLeft; /* 2 */
return { top: top, left: left };
}
-
getBoundingClientRect()
不考虑滚动,所以你必须对此进行补偿。 - 可以在
<html>
上设置边框,因此如果不减去它的值,该函数可能会返回相对于文档的不正确的元素位置。
关于javascript - IE中元素问题的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010218/