如何为多个元素重复jQuery scroll事件函数?

zbwhf8kr  于 2023-04-29  发布在  jQuery
关注(0)|答案(1)|浏览(119)

我使用了一个简单的函数,让一个元素只有在窗口向下滚动时才出现。问题是,我的函数基于元素的ID --但我实际上有多个元素,我希望相同的函数独立地在每个元素上工作。所以理论上,#scroll-to应该是一个类,而不是一个ID。我知道一定有比命名每个元素#scroll-to-1#scroll-to-2scroll-to-3并为每个元素一遍又一遍地重写函数更好的方法来做到这一点,但我不知道该怎么做!
谢谢!
这是基本功能:

$(window).scroll(function() {
   var hT = $('#scroll-to').offset().top,
       hH = $('#scroll-to').outerHeight(),
       wH = $(window).height(),
       wS = $(this).scrollTop();
  
  // when element is scrolled into view: 
  if (wS > (hT+hH-wH)){
        $('#scroll-to')
          .css( {opacity: 1});
   }
  
  // when element is scrolled out of view:
  if (wS < (hT+hH-wH)){
        $('#scroll-to')
          .css( {opacity: 0});
   }

});
cgh8pdjw

cgh8pdjw1#

您只需要对代码做很小的更改就可以将目标应用于多个元素。正如您所建议的,您将使用一个类来选择所有目标元素。然后,您将.each覆盖该集合,并在each处理程序中应用定位逻辑。由于window属性不会更改,因此可以将这些变量赋值留在.each处理程序之外。

$(window).scroll(function() {
  const $window = $(window);
  const windowHeight = $window.height();
  const windowScrollTop = $window.scrollTop();

  $('.scroll-to').each(function () {
    const $this = $(this);
    const top = $this.offset().top;
    const height = $this.outerHeight();
    const isInView = windowScrollTop > (top + height - windowHeight);

    $this.css({ opacity: (isInView ? 1 : 0) });
  });
});
body {
  margin: 0;
}

div {
  height: 100px;
  margin: 10px;
}

.one {
  background: purple
}

.two {
  background: orange;
}

.three {
  background: powderblue;
}

.four {
  background: pink;
}

.five {
  background: coral;
}

.six {
  background: plum;
}

.seven {
  background: turquoise;
}

.eight {
  background: crimson;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="scroll-to one"></div>
<div class="scroll-to two"></div>
<div class="scroll-to three"></div>
<div class="scroll-to four"></div>
<div class="scroll-to five"></div>
<div class="scroll-to six"></div>
<div class="scroll-to seven"></div>
<div class="scroll-to eight"></div>

相关问题