javascript - 滚动事件上的单个函数调用?

标签 javascript jquery scroll underscore.js

前面的问题: 我怎样才能更改此脚本,以便为向上或向下滚动进行简洁的单一函数调用?

这是一个 JSFiddle 清楚地代表了问题。

以下脚本根据用户的滚动方向成功推送了一个告警:

//Firefox
$('html').on('DOMMouseScroll', function(e){
    var delta = e.originalEvent.detail;

    if (delta > 0) {

        alert('You scrolled up');

    } else if (delta < 0) {

        alert('You scrolled down');
    }

});

//Everything else
$('html').on('mousewheel', function(e){
var delta = e.originalEvent.wheelDelta;

if (delta < 0) {

    alert('You scrolled down');

} else if (delta > 0) {

    alert('You scrolled up');
}
});

但是有一个问题: 当我向上或向下滚动时,如果用户向上或向下滚动,该函数会被调用多次,而不是仅仅执行一次。

因此,我的问题是:我如何更改此脚本,以便为向上或向下滚动发生简洁的单一函数调用?

已知解决方案: Underscore.js 提供了一个功能

_.debounce(<function>,delay)  

但这会导致延迟并导致错误修复。

最佳答案

您可以使用一个简单的基于标志的解决方案

var flag;
//Everything else
$('html').on('mousewheel', function (e) {
    var delta = e.originalEvent.wheelDelta;

    if (flag != 1 && delta < 0) {
        flag = 1;
        //alert('You scrolled down');
        $(".notify").append("<p>You scrolled down</p>");

    } else if (flag != 2 && delta > 0) {
        flag = 2;
        //alert('You scrolled up');
        $(".notify").append("<p>You scrolled up</p>");
    }
});

演示:Fiddle

你也可以将这两个处理程序组合在一起

var flag;
$('html').on('mousewheel DOMMouseScroll', function (e) {
    var delta = e.originalEvent.wheelDelta || e.originalEvent.detail;

    if (flag != 1 && delta < 0) {
        flag = 1;
        $(".notify").append("<p>You scrolled down</p>");
    } else if (flag != 2 && delta > 0) {
        flag = 2;
        $(".notify").append("<p>You scrolled up</p>");
    }
});

演示:Fiddle

关于javascript - 滚动事件上的单个函数调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20509886/

相关文章:

javascript - 如何使用 Q 将同步函数包装在 Promise 中

jquery - 使用 jQuery 访问 css ":after"选择器

android - 当我使用自定义适配器上下滚动 ListView 的速度太快时,getView() 开始表现异常。为什么?

javascript - jQuery 在两个类之间滚动切换

javascript - Gmaps4rails - Rails 4

javascript - 如何在字符串中搜索多个值?

javascript - 可以取消 jQuery 延迟吗?

android - 当我们像 vine 和 instagram 一样滚动时如何播放视频?

javascript - 视频Javascript、HTML5、效果

javascript - 无法在 owl-carousel 选项数组中写入 var 值