【问题标题】:window.scroll events triggering twicewindow.scroll 事件触发两次
【发布时间】:2014-02-25 15:13:52
【问题描述】:

无论我使用什么方法来检测页面上的滚动,都会触发两次事件。请查看我尝试过的不同方法的代码。

<body onmousewheel="alert('Why are you alerting twice?')">

或

<script src="js/jquery-1.8.3.min.js"></script>
<script>
$(window).scroll(function(){
    alert("Why are you alerting twice?");
});
</script>

或

window.onscroll = please_scroll;

function please_scroll() {
      alert("Why are you alerting twice?");
    }

我什至尝试过使用 $.debounce。

如果有任何用处,我将解释我正在尝试做的事情: 当用户向上或向下滚动滚轮时,页面将动画滚动到下一个全宽内容 div。我的代码可以在我的菜单上成功执行此操作,但我也希望它在用户滚动时发生,本质上是自动帮助他们滚动到我页面的每个部分。这是我目前用于滚动的功能:

function scrollTo(id){
  // Scroll
  $('html,body').animate({scrollTop: $("#"+id).offset().top - 110},'slow',function(){
    animation_active = "false";
  });
}

【问题讨论】:

  • 首先,应该是:window.onscroll = please_scroll; 其次,你不应该使用 alert 来调试事件
  • 那么鼠标滚轮和其他像苹果鼠标这样的隐藏在使用时可以更频繁地触发滚动事件。你必须为此使用超时

标签: javascript jquery scroll custom-scrolling


【解决方案1】:

许多设备可以触发似乎再次发生的滚动事件。只需为此使用超时:

var timeout;

$(window).scroll(function() {
    clearTimeout(timeout);  
    timeout = setTimeout(function() {
        // do your stuff
    }, 50);
});

50 可以玩,我推荐 50 到 150 之间的值。

【讨论】:

  • 我只花了 4 个小时尝试调试它,您似乎已经直接解决了我的问题。哇。谢谢!
  • 很高兴我能帮上忙! :)
  • 我也大声笑!我认为不需要超时,我的问题:stackoverflow.com/questions/32383804/…
  • 工作但有延迟!,不是立即
  • @WantToDo 将 50 减少到任何漂浮的船
猜你喜欢
  • 1970-01-01
  • 2014-04-07
  • 2013-03-28
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多