每次滚动到事件时仅触发一次事件

Triggered event only once every time it is scrolled to

提问人:Sergei 提问时间:6/23/2023 更新时间:6/24/2023 访问量:50

问:

我有一些事件,当用户滚动到元素«itemSection1»时。但是此事件将重复多次,因为用户将继续滚动,直到此元素完成。如何使事件在每次滚动到时仅触发一次?

当我下次到达这个元素时,我再次需要这个事件

$(window).scroll(function() {
    if ($(this).scrollTop() >= $('.itemSection1').offset().top - 150) {
   
    $('.scrollLinks a').removeClass('active');
    $('.menuItem1').addClass('active');

    alert('Hello!'); // some event that i need only once on reaching

    } else {
    
    $('. menuItem1').removeClass('active');
    
    }
    });
jQuery 滚动

评论

0赞 Sergei 6/24/2023
我的意思是每次滚动到 menuItem1 时才显示警报
0赞 user2314737 6/24/2023
参见:stackoverflow.com/a/76542105/2314737

答:

0赞 user2314737 6/24/2023 #1

您希望在滚动后触发某些操作,但仅在达到特定偏移量时触发。因为在通过某个 treshold 后,你添加了 类 ,你可以使用该信息。"active"

检查元素是否已经具有类"active"

 // add class etc only if not already added
        if (!($("p").hasClass("active"))) {

$(document).ready(function() {
      $(window).scroll(function() {
          if ($(window).scrollTop() >= 5) {
           // add class etc only if not already added
            if (!($("p").hasClass("active"))) {
                $("p").addClass("active");
                $('.scrollLinks a').removeClass('active');
                $('.menuItem1').addClass('active');
                alert('Hello!'); // some event that i need only once on reaching
              }
            }
            else {

              $('p').removeClass('active');

            }
          })
      });
p {
  background: green;
  height: 1300px;
  width: 100%;
}

.active {
  background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Scroll down this page.</p>