Если я правильно понимаю вашу проблему правильно, вы видите огонь события слишком часто. Проблема здесь в том, что для любого заданного действия прокрутки событие срабатывает несколько раз. Вы можете увидеть это, если открыть консоль разработчика в своем браузере и сделать console.log(e.originalEvent.wheelDelta)
. Это может сломать большой свиток на несколько небольших событий прокрутки, отбросив ваше желаемое поведение. Путь я обращался с этим было использовать переменную для прокрутки дельта:
$(document).ready(function(){
var scrollPixels = 0; // variable to store scroll delta
$('body').bind('mousewheel', function(e){
// increment/decrement scroll delta
scrollPixels += e.originalEvent.wheelDelta;
console.log(scrollPixels);
if (scrollPixels < -20) {
scrollPixels = 0; // clear scroll delta
alert('Coming down!');
}
else if (scrollPixels > 20){
scrollPixels = 0; // clear scroll delta
alert('Coming up!');
}
});
});
Вы можете очистить дельту прокрутки после вверх или вниз предупреждения пожаров.
JS Fiddle
Вы также можете увеличить свой тест на более чем 20 пикселей, поскольку большинство свитков будет срабатывать это событие - 20 пикселей составляет лишь около 1/4 дюйма.
Надеюсь, что это поможет. Если это не исправить вашу проблему, не стесняйтесь комментировать, где я ошибся. Удачи!
Обновление адреса комментарий:
Вы можете подождать, пока свиток не останавливается, установив тайм-аут, который будет ждать короткий промежуток времени (250 мс в данном примере) после того, как скроллинг прекратил выполнение. Я переехал логику в этом тайм-аут, так что он будет работать только после того, как скроллинг остановился:
$(document).ready(function(){
var scrollPixels = 0; // variable to store scroll delta
var scrolling; // timeout function var
$('body').bind('mousewheel', function(e){
// increment/decrement scroll delta
scrollPixels += e.originalEvent.wheelDelta;
console.log(scrollPixels);
clearTimeout(scrolling);
scrolling = setTimeout(function() {
console.log('stop wheeling! ', scrollPixels);
scrolling = undefined;
if (scrollPixels < -300) {
scrollPixels = 0; // clear scroll delta
alert('Coming down!');
}
else if (scrollPixels > 300){
scrollPixels = 0; // clear scroll delta
alert('Coming up!');
}
}, 250);
});
});
Обновлено JS Fiddle
Эй, большое спасибо за ваше время! Это близко к тому, что я ищу. Я увеличил значение и сохранил его в var (http://jsfiddle.net/marianrick/t7y3aLfh/3/). Как только я прокручусь очень быстро (один раз), я получаю это предупреждение для каждого '300px'. Есть ли возможность запускать его только один раз (даже если было прокручивается 2000 пикселей), пока не закончится событие прокрутки? (Вы можете проверить сайт в прямом эфире: http://img.hiamovi-client.com - Я хочу прокрутить вниз по одному слайду при прокрутке) –
Привет, Мариан, рад, что я мог бы помочь. Я добавил второй блок кода и скрипку, в которой должен быть указан ваш комментарий. Дайте мне знать, если это поможет! – grdevphl
Большое спасибо за эту настройку! «250» - довольно заметная задержка при использовании сайта. Установка его на '50' уже работает как шарм. –