降低事件触发的频率

Reduce the frequency over which an event can trigger

我写了一个 jQuery 脚本,当滚轮被激活时,它会在一个元素上滚动 in/out。

不幸的是,滚动本身很慢,所以如果用户多次滚动鼠标滚轮,那么积压的滚动可能需要很长时间才能赶上。我想设置它,以便在捕获的每个滚动之间有半秒的延迟,下一个滚动只能在半秒过去后触发,在此期间任何额外的滚动都应该被忽略。

在下面的脚本中,如果有人一直在框上滚动,我只希望计数器每半秒增加一次,而不管他们滚动的速度有多快。我不知道如何做到这一点,所以任何帮助将不胜感激。谢谢!

$("#boxScroll").bind('mousewheel', function() {
  var countPastScrolls = parseInt($("#countScrolls").text(),10)
  $("#countScrolls").text(countPastScrolls+1)
})
.box {
  width: 50px;
  height: 50px;
  border: 1px solid black;
  background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<DIV class="box" id="boxScroll"></DIV>
Count of scrolls: <DIV id="countScrolls">0</DIV>

为此,您可以使用超时来消除滚动计数器的抖动,使其每滚动 500 毫秒仅触发一次。试试这个:

$("#boxScroll").on('mousewheel', function() {
  var $box = $(this);

  if (!$box.data('disable-count')) {
    $box.data('disable-count', true)
    $("#countScrolls").text(function(i, t) {
      return parseInt(t, 10) + 1;
    });

    setTimeout(function() {
      $box.data('disable-count', false);
    }, 500);
  }
})
.box {
  width: 50px;
  height: 50px;
  border: 1px solid black;
  background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<div class="box" id="boxScroll"></div>
Count of scrolls:
<div id="countScrolls">0</div>