JS/jQuery – 在循环中检查一次初始位置(滚动事件)

JS/jQuery – Check initial position once inside a loop (scroll event)

编辑

var setInitPos = true;

function loop() {

  $(".image").each(function() {
    // some other code

    if (imageIsVisible) {
      // some other code

      // Set variable initPos only once for each item
      if (setInitPos) {
        initPos = $(window).scrollTop();
        setInitPos = false;
      }
    }

    // some other code
  })

}

$(window).scroll(function(){ loop() }

如果某个项目在视口中可见,则用每个项目的值填充一次 var initPos。

但是现在第二项以setInitPos = false开始!这是为什么?

它是全局的,因为您在全局范围内指定了它。

要使它在迭代中是局部的,然后在函数中声明它。您需要为此使用 varb 关键字(如果您使用 ES6,则使用 let)

要使其成为图像的本地属性,请使用 this.initPos,这样您就可以为每个图像元素创建一个新属性。

我发现除了initPos之外没有声明其他变量。而且只声明一次。

尝试在 "if (imageIsVisible) {"

中再次声明 "var initPos"

编辑

在每个 DOM 元素的基础上保持 initPos 的最佳方法是将它附加到每个 DOM 元素,您可以使用 jQuery' s .data()

  $(".image").each(function() {
    var initPos = $(this).data('initpos') || 0;

    // some other code

    if (imageIsVisible) {
      // some other code

      // Set variable initPos only once for each item
      if (!initPos) {
        $(this).data('initpos',$(window).scrollTop());
      }
    }