Я использую bind/unbind для прокрутки мышиного колеса, основываясь на этом ответе SO:
Jquery, отвязать событие mousewheel, затем снова привязать его после завершения действий?
Я туннелирую вверх по дереву событий от дельты, чтобы нацелиться только на значения X мышиного колеса. Все работает хорошо. Проблема, которую я пытаюсь решить: Я хочу просто прокрутить вперед/назад ОДНУ панель, а затем остановить прокрутку. В настоящее время я отвязываю событие колеса мыши сразу после перемещения, и это эффективно останавливает прокрутку... но отвязка события колеса мыши также перегружает страницу. Мне нужно, чтобы я мог определить направление по самому первому значению deltaX, затем сделать перемещение и перестать слушать. Нужно ли мне искать ответы в автопрокрутке? Привязка/отвязка выглядит неуклюже, но я не могу понять, как отвязаться после одного движения и при этом иметь возможность прокрутки после завершения этого движения. Вот моя функция mousewheel:
function mouseHandler(event, delta) {
$('.homeScrollable').bind('mousewheel', mouseHandler);
var deltaX = event.originalEvent.wheelDeltaX;
//console.log(event.originalEvent.wheelDeltaX);
if(deltaX <= 0) {
//move forward 1 screen and stop
scrollapi.move(1);
$('.homeScrollable').unbind('mousewheel', mouseHandler);
} else if(deltaX > 0) {
//move backward 1 screen and stop
scrollapi.move(-1);
$('.homeScrollable').unbind('mousewheel', mouseHandler);
}
event.preventDefault();
// Rebind mousewheel event:
$('.homeScrollable').bind('mousewheel', mouseHandler); };
Я также рассматривал возможность установки таймера, а-ля:
jquery mousewheel plugin: how to fire only one function every scroll
что казалось невероятно многообещающим, но нет. Вот страница плагина для этого парня: http://brandonaaron.net/code/mousewheel/docs
Спасибо, что проверили.