Вы можете проверить, прокручиваются ли они вверх или вниз, проверяя верхнюю часть прокрутки окна и сравнивая ее с предыдущим верхним прокруткой, используя scroll event. debounce it for efficiency reasons
(function($, window){
var $window = $(window);
var position = $window.scrollTop();
var timeout;
var debounce = function(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 checkPosition = function() {
if(timeout !== null){
//this will cancel the timeout if this function is called within 200ms
clearTimeout(timeout);
}
var scrollTop = $window.scrollTop();
if (scrollTop > position) {
//scrolling down
} else {
//scrolling up
}
position = scrollTop;
//this function will fire if the user stops scrolling for 200ms
timeout = setTimeout(function(){
//user stopped scrolling
}, 200);
};
var debouncedScroll = debounce(checkPosition, 50);
$window.on('scroll', debouncedScroll);
})(jQuery, window);
Хорошо, спасибо. В основном я хочу добавить класс, называемый «прокруткой» к элементу во время прокрутки, и когда они прекращают прокрутку, я хочу, чтобы класс был удален. Будет ли это подходящим для этого? –
Обновленный ответ на использование тайм-аута, в основном это отменит таймаут, когда функция прокрутки ударит, а затем установите новый. Таким образом, если функция прокрутки не попадает на 200 мс (иначе пользователь больше не будет прокручивать) функция будет срабатывать –
Вы пытались снизить 200 мс? Вероятно, это может пойти намного ниже, прежде чем это вызовет проблемы. Хотя имейте в виду время отладки 50 мс, оно должно быть выше, чем время дебюта, так как это часто можно вызвать функцию при макс. Вероятно, это может снизиться до 25 или около того, если вам нужны еще более быстрые реакции. –