Ответ 1
Важное обновление 01/2015 - приостановлено событие mousewheel:
Тем временем mousewheel
событие устарело и заменено на wheel
.
MDN Docs для mousewheel говорят:
Не используйте это событие колеса.
Этот интерфейс нестандартен и устарел. Он использовался только в браузерах, отличных от Gecko. Вместо этого используйте стандартное событие колеса.
Теперь вы должны использовать что-то вроде:
// This function checks if the specified event is supported by the browser.
// Source: http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
function isEventSupported(eventName) {
var el = document.createElement('div');
eventName = 'on' + eventName;
var isSupported = (eventName in el);
if (!isSupported) {
el.setAttribute(eventName, 'return;');
isSupported = typeof el[eventName] == 'function';
}
el = null;
return isSupported;
}
$(document).ready(function() {
// Check which wheel event is supported. Don't use both as it would fire each event
// in browsers where both events are supported.
var wheelEvent = isEventSupported('mousewheel') ? 'mousewheel' : 'wheel';
// Now bind the event to the desired element
$('#foo').on(wheelEvent, function(e) {
var oEvent = e.originalEvent,
delta = oEvent.deltaY || oEvent.wheelDelta;
// deltaY for wheel event
// wheelData for mousewheel event
if (delta > 0) {
// Scrolled up
} else {
// Scrolled down
}
});
});
P.S.
Для comment от Коннелла Уоткинса - "Не могли бы вы объяснить деление на 120?",
есть некоторые подробности на MSDN:
Событие onmousewheel является единственным событием, которое предоставляет свойство wheelDelta. Это свойство указывает расстояние, которое поворачивала колесная кнопка, выраженное в кратных 120. Положительное значение указывает на то, что кнопка колеса повернулась от пользователя. Отрицательное значение указывает, что кнопка колеса повернута к пользователю.
Я оставил часть delta / 120
в моем методе, так как нет никакой полезной ИМО. Прокрутка вверх delta > 0
и вниз delta < 0
. Простой.