首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将滚动事件数据传递给节流函数

将滚动事件数据传递给节流函数
EN

Stack Overflow用户
提问于 2019-03-14 13:58:38
回答 1查看 2.5K关注 0票数 2

我正在尝试使用wheel事件和节流函数创建我自己的简单的完全高度滚动脚本(因为我只希望每X毫秒注册一卷滚动。我希望将wheel事件的事件数据传递到throttle()函数正在节流的函数中。

下面是我的代码的简化版本:

代码语言:javascript
运行
复制
function throttle(callback, limit) {
    var wait = false; // Initially, we're not waiting
    return function () { // We return a throttled function
        if (!wait) { // If we're not waiting
            callback.call(); // Execute users function
            wait = true; // Prevent future invocations
            setTimeout(function () { // After a period of time
                wait = false; // And allow future invocations
            }, limit);
        }
    }
}

function onScroll(event) {
  // do stuff here on scroll
}

window.addEventListener('wheel', throttle(onScroll, 700), false);

如果我不需要来自wheel事件的数据,这会很好,但是我需要使用event.deltaY来确定onScroll()函数内部的滚动方向。

本质上,我希望将最后一行更改为以下内容(尽管我知道这是行不通的):

window.addEventListener('wheel', throttle(onScroll(event), 700), false);

所以.

如何将wheel事件数据传递到onScroll()函数中,同时仍在节流?

我尝试过的:

我尝试了下面的代码,这样我就可以将event数据传递到throttle()函数中,它成功地工作了

代码语言:javascript
运行
复制
window.addEventListener('wheel', function(e) {
  throttle(onScroll, 700, e)
}, false);

但是,我不知道如何处理我的e函数中的throttle()函数,以便能够将它传递给onScroll()函数。我试着用:

callback.call(); // Execute users function

至:

callback.call(e); // Execute users function (使用传递给油门函数的e )

但这阻止了onScroll函数被调用.(我假设是因为throttle()返回了一个函数,但是这个返回的函数没有被调用,因为它包装在eventListener中的另一个函数中?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-14 14:01:40

只要把论点看一遍:

代码语言:javascript
运行
复制
function throttle(callback, limit) {
  var wait = false;
  return function (...args) { 
    if (!wait) {
        callback(...args);
        wait = true; 
        setTimeout(function () { 
            wait = false; 
        }, limit);
    }
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55164410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档