Для другого вопроса я написал этот ответ , включая этот пример кода .
В этом коде я использую колесо мыши, чтобы увеличивать или уменьшать масштаб HTML5 Canvas. Я нашел код, который нормализует разницу в скорости между Chrome и Firefox. Однако обработка масштабирования в Safari намного, намного быстрее, чем в любом из них.
Вот код, который у меня сейчас есть:
var handleScroll = function(e){
var delta = e.wheelDelta ? e.wheelDelta/40 : e.detail ? -e.detail/3 : 0;
if (delta) ...
return e.preventDefault() && false;
};
canvas.addEventListener('DOMMouseScroll',handleScroll,false); // For Firefox
canvas.addEventListener('mousewheel',handleScroll,false); // Everyone else
Какой код можно использовать, чтобы получить одинаковое значение «дельта» для одинакового количества прокрутки колеса мыши в Chrome v10 / 11, Firefox v4, Safari v5, Opera v11 и IE9?
Этот вопрос связан, но не имеет хорошего ответа.
Изменить : Дальнейшее расследование показывает, что одно событие прокрутки "вверх" является:
| evt.wheelDelta | evt.detail ------------------ + ---------------- + ------------ Safari v5 / Win7 | 120 | 0 Safari v5 / OS X | 120 | 0 Safari v7 / OS X | 12 | 0 Chrome v11 / Win7 | 120 | 0 Chrome v37 / Win7 | 120 | 0 Chrome v11 / OS X | 3 (!) | 0 (возможно неправильно) Chrome v37 / OS X | 120 | 0 IE9 / Win7 | 120 | не определено Opera v11 / OS X | 40 | -1 Opera v24 / OS X | 120 | 0 Opera v11 / Win7 | 120 | -3 Firefox v4 / Win7 | неопределенный | -3 Firefox v4 / OS X | неопределенный | -1 Firefox v30 / OS X | неопределенный | -1
Кроме того, использование трекпада MacBook в OS X дает разные результаты даже при медленном движении:
- В Safari и Chrome
wheelDelta
это значение 3 вместо 120 для колеса мыши. - На Firefox
detail
это обычно2
, иногда1
, но при очень медленной прокрутке НИКАКОГО СОБЫТИЯ HANDLER не запускается вообще .
Итак, вопрос в следующем:
Каков наилучший способ дифференцировать это поведение (в идеале без какого-либо агента пользователя или прослушивания ОС)?
e.wheelDelta/120
?