将滚动事件数据传递给油门函数
Pass scroll event data into throttle function
我正在尝试使用 wheel
事件和节流功能创建我自己的简单全高滚动脚本(因为我只希望每 X 毫秒注册 1 个滚动。我想传递事件数据wheel
事件到被我的 throttle()
函数限制的函数中。
这是我的代码的简化版本:
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()
函数,该函数成功运行
window.addEventListener('wheel', function(e) {
throttle(onScroll, 700, e)
}, false);
但我不确定如何处理 throttle()
函数中的 e
才能将其传递给 onScroll()
函数。我尝试更改行:
callback.call(); // Execute users function
至:
callback.call(e); // Execute users function
(使用e
传入油门函数)
但这甚至阻止了 onScroll
函数被调用...(我假设是因为 throttle()
正在返回一个函数,但是这个返回的函数没有被调用,因为它被包装在另一个函数中在 eventListener
?)
只需传递参数:
function throttle(callback, limit) {
var wait = false;
return function (...args) {
if (!wait) {
callback(...args);
wait = true;
setTimeout(function () {
wait = false;
}, limit);
}
}
}
我正在尝试使用 wheel
事件和节流功能创建我自己的简单全高滚动脚本(因为我只希望每 X 毫秒注册 1 个滚动。我想传递事件数据wheel
事件到被我的 throttle()
函数限制的函数中。
这是我的代码的简化版本:
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()
函数,该函数成功运行
window.addEventListener('wheel', function(e) {
throttle(onScroll, 700, e)
}, false);
但我不确定如何处理 throttle()
函数中的 e
才能将其传递给 onScroll()
函数。我尝试更改行:
callback.call(); // Execute users function
至:
callback.call(e); // Execute users function
(使用e
传入油门函数)
但这甚至阻止了 onScroll
函数被调用...(我假设是因为 throttle()
正在返回一个函数,但是这个返回的函数没有被调用,因为它被包装在另一个函数中在 eventListener
?)
只需传递参数:
function throttle(callback, limit) {
var wait = false;
return function (...args) {
if (!wait) {
callback(...args);
wait = true;
setTimeout(function () {
wait = false;
}, limit);
}
}
}