jquery 如何在每次滚动div时触发JS事件

plupiseo  于 2023-03-01  发布在  jQuery
关注(0)|答案(2)|浏览(167)

我们希望在用户浏览器顶部每次经过一个重复的div时触发一个JS事件。
<div class="refresh"></div>
如果上面的div在一个页面上重复了多次,我们希望在每次滚动它时触发一个特定的事件(但是,一旦它在页面顶部离开视图,而不是在它进入视图时)。
我试过了,但我只能让它发射一次,而不是寻找多个divs。

bcs8qyzn

bcs8qyzn1#

这似乎行得通,也许有更好的办法。

const div = document.getElementById("refresh")

let isInView = false

document.addEventListener("scroll", e => {
  const bounding = div.getBoundingClientRect()

  if (bounding.top < bounding.height && bounding.top > 0) {

    // if you want it to only fire once when it comes into view
    if (isInView) return
    isInView = true

    console.log("In view!")
    // do other stuff...
  } else {
    isInView = false
  }
})
pengsaosao

pengsaosao2#

使用相交观察者判断:

const refreshDoms = document.querySelectorAll('.refresh');

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    // refresh element out of view
    if (!entry.isIntersecting) {
      // fire JS event code
    }
  });
});

refreshDoms.forEach(dom=> observer.observe(dom));

https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver如果您使用IntersectionObserver,则需要考虑浏览器兼容性。

相关问题