Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将时间间隔内触发的鼠标滚轮滚动事件数减少为单个事件_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何将时间间隔内触发的鼠标滚轮滚动事件数减少为单个事件

Javascript 如何将时间间隔内触发的鼠标滚轮滚动事件数减少为单个事件,javascript,jquery,html,Javascript,Jquery,Html,目前在我的网站上,我有一个鼠标滚轮功能,可以滚动用户在页面上设置位置。但是,当用户滚动速度稍快且不将滚动限制为单个鼠标滚轮滚动单元时,此功能会触发多次。如何在一秒钟的特定时间间隔内获取所有鼠标滚轮滚动事件,并使其触发我的函数一次?此jQuery代码允许您以毫秒为单位设置间隔 var区间=2000; var last=0; $(文档)。滚动(函数(){ var now=new Date().getTime(); 如果(上次+间隔

目前在我的网站上,我有一个鼠标滚轮功能,可以滚动用户在页面上设置位置。但是,当用户滚动速度稍快且不将滚动限制为单个鼠标滚轮滚动单元时,此功能会触发多次。如何在一秒钟的特定时间间隔内获取所有鼠标滚轮滚动事件,并使其触发我的函数一次?

此jQuery代码允许您以毫秒为单位设置间隔

var区间=2000;
var last=0;
$(文档)。滚动(函数(){
var now=new Date().getTime();
如果(上次+间隔<现在){
最后=现在;
//做事
}
});可以在事件处理程序上使用提供去盎司功能,但jQuery不提供。下面是一个简单的示例:

function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};
var delay = 1000; // 1s

var handlerFunction = debounce(function (e) {
  console.log(1);
}, delay);

$(document).on('scroll', handlerFunction);
一旦你有了这个,你可以这样使用它:

function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};
var delay = 1000; // 1s

var handlerFunction = debounce(function (e) {
  console.log(1);
}, delay);

$(document).on('scroll', handlerFunction);
而您的处理程序将仅在上次调用处理程序后1000毫秒执行

给你玩