javascript - 返回的 y 值大于实际 y 位置 [JS (no jQ)/DOM]

标签 javascript dom position positioning offset

我通过以下两种方式之一计算元素 el 的 y 位置:

var elTop = 0;                    
do{
    el += el.offsetTop;
    }while(el = el.offsetParent); 
    window.scrollTo(0, elTop);

   var elTop = (el.getBoundingClientRect()).top;
   window.scrollTo(0, elTop);

在这两种情况下,elTop 都太高,而 scrollTo 跳得太远。

我在线试过这个脚本。当我用 Firefox 下载整个页面时,它突然起作用了。在视觉外观或结构上在线/离线没有差异。 只有 body 的 offsetHeight 和搜索到的元素的 offsetTop 发生了变化。

这些属性如何在没有任何视觉效果的情况下发生变化?

最佳答案

为避免上述问题,您应该考虑使用 getBoundingClientRect() + “页面滚动”,而不是计算所有元素的偏移量。

var yPosition = element.getBoundingClientRect().top + window.pageYOffset;

http://jsbin.com/ukuRaXe/2/edit

请注意,此解决方案不适用于 < IE9。

关于javascript - 返回的 y 值大于实际 y 位置 [JS (no jQ)/DOM],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20075284/

相关文章:

javascript - iOS定位修复

python - pygame 将图像放置在屏幕上的问题

CSS占用剩余空间

javascript - 通过javascript动态创建图像映射

javascript - 关于 DOM 元素的哪些信息可以让 JavaScript 唯一地(某种程度上)识别它? (例如,当它没有 `id` 时)

javascript - html节点的 "text"子节点是什么?

javascript - XMLHttpRequest.send(file) 的 Fetch API 等价物是什么?

javascript - 创建后更改gojs端口Id

javascript - 调整 flipclock.js 的大小未按预期调整

javascript - 谷歌街景位置限制