Подтвердить что ты не робот

Событие Mousewheel в современных браузерах

Я хочу иметь чистый и приятный JavaScript для mousewheel, поддерживая только последнюю версию обычных браузеров без устаревшего кода для устаревших версий без какой-либо JS-инфраструктуры.

Событие Mousewheel хорошо объяснено здесь. Как упростить его для последних версий браузеров?

У меня нет доступа ко всем браузерам, чтобы проверить его, поэтому caniuse.com - отличная помощь для меня. Увы, колесики там не упоминаются.

Основываясь на комментарии Дерека, я написал это решение. Он действителен для всех браузеров?

someObject.addEventListener("onwheel" in document ? "wheel" : "mousewheel", function(e) {
  e.wheel = e.deltaY ? -e.deltaY : e.wheelDelta/40;
  // custom code
});
4b9b3361

Ответ 1

Вот статья, которая описывает это, и дает пример:

http://www.sitepoint.com/html5-javascript-mouse-wheel/

Соответствующий код, минус конкретный пример, заданный для изменения размера изображения:

var myitem = document.getElementById("myItem");
if (myitem.addEventListener)
{
    // IE9, Chrome, Safari, Opera
    myitem.addEventListener("mousewheel", MouseWheelHandler, false);
    // Firefox
    myitem.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
}
// IE 6/7/8
else
{
    myitem.attachEvent("onmousewheel", MouseWheelHandler);
}

function MouseWheelHandler(e)
{
    // cross-browser wheel delta
    var e = window.event || e; // old IE support
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));

    return false;
}

Ответ 2

Так будет чище в 2018 году:

window.addEventListener("wheel", event => console.info(event.deltaY));

Браузеры могут возвращать разные значения для дельты (например, Chrome возвращает +120 (прокрутка вверх) или -120 (прокрутка вниз). Хорошая уловка для нормализации - это извлечь его знак, эффективно преобразовав его в +1/-1:

window.addEventListener("wheel", event => {
    const delta = Math.sign(event.deltaY);
    console.info(delta);
});

Ссылка: MDN.

Ответ 3

Это будет работать и в Firefox, Chrome и Edge:

window.addEventListener("wheel", function(e) {
    var dir = Math.sign(e.deltaY);
    console.log(dir);
});

Ответ 4

Событие mousewheel является нестандартным и MDN рекомендует событие колеса.

var item = document.getElementById('item')
item.addEventListener('mousewheel', function(e) {
    console.log('event', e)
}, false)

Ответ 5

Попробуйте этот polyfill MDN. Это предотвращает поведение по умолчанию и создает новый addWheelListener()