Я пытаюсь создать свой собственный простой скрипт прокрутки с полной высотой, используя событие wheel
и функцию газа (так как я хочу, чтобы 1 прокрутка регистрировалась каждые X миллисекунд. Я хочу передать данные события 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
, но мне нужно определить направления прокрутки внутри моей функции onScroll()
, используя event.deltaY
.
По сути, я хочу изменить последнюю строку на следующую (хотя я знаю этоне сработает):
window.addEventListener('wheel', throttle(onScroll(event), 700), false);
Итак ...
Как передать данные события wheel
в onScroll()
функционирует, все еще ограничивая его?
Что я пробовал:
Я попробовал следующий код, чтобы я мог передать данные event
в throttle()
функция, которая работала успешно
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
?)