【问题标题】:Debounce mouse wheel去抖鼠标滚轮
【发布时间】:2013-11-22 09:58:07
【问题描述】:

我正在构建一个自定义 jQuery 代码,以允许用户通过使用鼠标滚轮来引导用户浏览网页。

我正在构建的代码与此页面类似:Link

一切正常,但默认情况下鼠标滚轮事件会触发多次,使脚本“跳过”完整的 div 并向下/向上滚动多次,而不是一次。

我需要一种方法来限制鼠标滚轮只触发一次。在寻找答案的过程中,我发现 Ben Alman 的脚本使用了“去抖动”。

我的问题是;有没有办法消除每个鼠标滚轮事件而不是消除它的功能?所以基本上告诉“鼠标滚轮”每 500 毫秒触发一次,并忽略在那 500 毫秒期间发送的所有触发。

【问题讨论】:

  • 使用超时去抖动

标签: jquery scroll mousewheel


【解决方案1】:

如何使用setTimeout 来控制事件的触发 - 如:

$("div").html((new Array(1000)).join(" test")).on("mousewheel DOMMouseScroll MozMousePixelScroll", function()
{
    if (!$(this).data('flag'))
    {
        var self = this;
        $(this).data('timeout', window.setTimeout(function()
        {
            $(self).data('flag', false);
        }, 500));

        $(this).data('flag', true);

        console.log('here');
    }
});

小提琴:http://jsfiddle.net/aN4hU/

【讨论】:

  • 该功能正是我想要的,马上试用。谢谢!
  • 工作就像一个魅力!非常感谢!
  • 不知道这是否有任何区别,但如果您需要您的脚本在该网站上运行,我会使用 animate 函数并以此为基础 - 如您所愿动画完成后可以滚动(而不是在 500 毫秒后滚动 - 考虑到不同的屏幕分辨率,动画持续时间将需要不同的时间才能完成)。
  • 是的,我在实现您的代码 sn-p 后才注意到这个问题。但是,我需要 div 在 windowresize 上“捕捉”。 $(window).resize(function () $('html,body').scrollTop(divs.eq(div).offset().top);});动画是不可能的。
  • 嗯 - 我不知道不可能,但我会这样做:jsfiddle.net/aN4hU/1。现在 - 还有一个滚动事件的实例需要处理,例如:检查哪张幻灯片是可见的,然后滚动到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
相关资源
最近更新 更多