Javascript jQuery(element).offset().top在滚动时暂时不准确

Javascript jQuery(element).offset().top在滚动时暂时不准确,javascript,jquery,Javascript,Jquery,我试图在一个元素进入视图后触发事件,用于页面中不同位置的几个不同元素。我正在使用另一个StackExchange应答中的实用程序函数来确定元素a或元素B何时进入视图,特别是使用jQuery(Element).offset().top来确定元素何时进入视图。在本例中,我们假设元素A在页面中较高,因此应该首先看到它,然后是元素B 当元素A进入视图时,元素A的代码会按预期触发,但元素B也会触发,即使它在屏幕下方约1000处并且完全不在视图中。jQuery(element).offset().top f

我试图在一个元素进入视图后触发事件,用于页面中不同位置的几个不同元素。我正在使用另一个StackExchange应答中的实用程序函数来确定元素a或元素B何时进入视图,特别是使用jQuery(Element).offset().top来确定元素何时进入视图。在本例中,我们假设元素A在页面中较高,因此应该首先看到它,然后是元素B

当元素A进入视图时,元素A的代码会按预期触发,但元素B也会触发,即使它在屏幕下方约1000处并且完全不在视图中。jQuery(element).offset().top for element B在元素a触发后的几秒钟内返回一个比元素B的实际位置小1400的数字,然后再滚动一点进行自我校正

我尝试在控制台中跟踪变量,并使用jQuery(element).offset().top;和jQuery(element.position().top;但是我们没有运气

我使用的实用功能是:

function Utils() {
  }
Utils.prototype = {
    constructor: Utils,
    isElementInView: function (element, fullyInView) {
        var pageTop = jQuery(window).scrollTop();
        var pageBottom = pageTop + jQuery(window).height();
        var elementTop = jQuery(element).offset().top;
        var elementBottom = elementTop + jQuery(element).height();

        if (fullyInView === true) {
            return ((pageTop < elementTop) && (pageBottom > elementBottom));
        } else {
            return ((elementBottom >= pageTop) && (elementTop <= pageBottom));
        }
    }
};
var Utils = new Utils();
当我在控制台中跟踪elementTop中的元素1/2和PageBottom时,我看到了这种情况:

(index):1237 elementTop : 4499 - Element 1 Top
(index):1235 PageBottom: 4496
(index):1237 elementTop : 5454 - Element 2 Top
(index):1235 PageBottom: 4499
(index):1237 elementTop : 4499 - Element 1 Top
(index):1302 Event Firing for Element 1
(index):1235 PageBottom: 4499
(index):1237 elementTop : 4148 - Element 2 Top
(index):1310 Event Firing for Element 2
(index):1235 PageBottom: 4500
(index):1237 elementTop : 4149 - Element 2 Top
(index):1310 Event Firing for Element 2
(index):1235 PageBottom: 4501
(index):1237 elementTop : 5454 - Element 2 Top
当我看到元素1时(4499),元素2返回的顶部是5454。当元素1进入视图时,元素2也立即激发,因为元素2返回的顶部变为4148。元素2的顶部在稍微滚动后会自动更正,并返回到5454


你知道为什么会这样吗?

Hi@Nick,你能提供一个可复制的例子吗?嗨,谢谢你的回复。不幸的是,这是一个WordPress网站,所以除了我给出的代码外,我不能复制和粘贴其他代码。我试图在没有WordPress的情况下自己重新编程,但我似乎无法在本地重新编程。也许这与WordPress有关。我举了一个例子,我认为与你所描述的类似,但它看起来像预期的那样工作。我认为这是WordPress的问题,我最终使用了一个解决方法,在当前元素不可见之前,不检查其他元素是否可见。希望如果其他人发现这个问题,这将对他们有所帮助。嗨@Nick,你能提供一个可复制的例子吗?嗨,谢谢你的回答。不幸的是,这是一个WordPress网站,所以除了我给出的代码外,我不能复制和粘贴其他代码。我试图在没有WordPress的情况下自己重新编程,但我似乎无法在本地重新编程。也许这与WordPress有关。我举了一个例子,我认为与你所描述的类似,但它看起来像预期的那样工作。我认为这是WordPress的问题,我最终使用了一个解决方法,在当前元素不可见之前,不检查其他元素是否可见。希望如果其他人发现这个问题,这将对他们有所帮助。
(index):1237 elementTop : 4499 - Element 1 Top
(index):1235 PageBottom: 4496
(index):1237 elementTop : 5454 - Element 2 Top
(index):1235 PageBottom: 4499
(index):1237 elementTop : 4499 - Element 1 Top
(index):1302 Event Firing for Element 1
(index):1235 PageBottom: 4499
(index):1237 elementTop : 4148 - Element 2 Top
(index):1310 Event Firing for Element 2
(index):1235 PageBottom: 4500
(index):1237 elementTop : 4149 - Element 2 Top
(index):1310 Event Firing for Element 2
(index):1235 PageBottom: 4501
(index):1237 elementTop : 5454 - Element 2 Top