колесо мыши, колесо и DOMMouseScroll в JavaScript
DOMMouseScroll
работает только для Firefox.
wheel
Кажется, работает как для Firefox, так и для chrome. Что это? Не нашел документов по этому делу.
mousewheel
не работает для Firefox.
как я должен использовать их, чтобы получить лучшую совместимость с браузером.
пример:
document.addEventListener('ScrollEvent', function(e){
DoSomething();
});
2 ответов
я бы предложил, чтобы все три из них использовались одновременно для охвата всех браузеров.
Примечания:
в версиях Firefox, где оба
wheel
иDOMMouseScroll
события поддерживаются, нам нужен способ, чтобы заставить браузер выполнить толькоwheel
, а не обе. Что-то вроде следующего:if ("onwheel" in window) ...
в выше проверьте, хотя, в случае
IE9
иIE10
не получится, потому что, хотя эти браузеры поддерживают тегwheel
событие, у них нетonwheel
атрибут в элементах DOM. Чтобы противостоять этому, мы можем использовать флаг, как показано ниже.я считаю, что количество возвращенных
e.deltaY
,e.wheelDelta
иe.detail
не является полезным, кроме помогает нам определить направление прокрутки, поэтому в решении ниже-1
и1
будут возвращены.
фрагмент:
/* The flag that determines whether the wheel event is supported. */
var supportsWheel = false;
/* The function that will run when the events are triggered. */
function DoSomething (e) {
/* Check whether the wheel event is supported. */
if (e.type == "wheel") supportsWheel = true;
else if (supportsWheel) return;
/* Determine the direction of the scroll (< 0 → up, > 0 → down). */
var delta = ((e.deltaY || -e.wheelDelta || e.detail) >> 10) || 1;
/* ... */
console.log(delta);
}
/* Add the event listeners for each event. */
document.addEventListener('wheel', DoSomething);
document.addEventListener('mousewheel', DoSomething);
document.addEventListener('DOMMouseScroll', DoSomething);
хотя прошло почти 3 года с момента публикации вопроса, я считаю, что люди, которые наткнутся на него в будущем, выиграют от этого ответа, поэтому не стесняйтесь предлагать / улучшать он.
вы можете функция обнаружения поддержки колеса, как это:
var wheelEvt = "onwheel" in document.createElement("div") ? "wheel" : // Modern browsers support "wheel"
document.onmousewheel !== undefined ? "mousewheel" : // Webkit and IE support at least "mousewheel"
"DOMMouseScroll"; // let's assume that remaining browsers are older Firefox
затем вы можете прикрепить обработчик события следующим образом:
$("#wrapper").on(wheelEvt, function(e) {
console.log(e.deltaY);
if (e.deltaY > 0) {
$("#Left").click();
} else if (e.deltaY <= 0) {
$("#Right").click();
}
});
или при использовании vanilla js:
document.getElementById("wrapper").addEventListener(wheelEvt, function(e) {
console.log(e.deltaY);
if (e.deltaY > 0) {
$("#Left").click();
} else if (e.deltaY <= 0) {
$("#Right").click();
}
}, false);
ссылка: https://developer.mozilla.org/en-US/docs/Web/Events/wheel