我通过以下两种方式之一计算元素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

请注意,此解决方案在
10-01 07:06