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

Returned y-value larger than actual y-position [JS (no jQ) / DOM]

本文关键字:jQ DOM JS 大于 位置 返回      更新时间:2023-09-26

我用以下两种方法之一计算元素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下载整个页面时,它突然起了作用。在视觉外观或结构方面,线上/线下没有差异。只有实体的offsetHeight和搜索元素的offsetTop发生了更改。

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

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

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

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

请注意,此解决方案在<IE9.