Для другого вопроса я написал этот ответ, включая этот примерный код.
В этом коде я использую колесико мыши для увеличения/увеличения холста HTML5. Я нашел код, который нормализует разницу в скорости между 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
Какой код можно использовать для получения того же значения "delta" для того же количества колесиков мыши, проходящего через 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 (possibly wrong)
Chrome v37/OS X | 120 | 0
IE9/Win7 | 120 | undefined
Opera v11/OS X | 40 | -1
Opera v24/OS X | 120 | 0
Opera v11/Win7 | 120 | -3
Firefox v4/Win7 | undefined | -3
Firefox v4/OS X | undefined | -1
Firefox v30/OS X | undefined | -1
Кроме того, использование трекпада MacBook в OS X дает разные результаты даже при медленном движении:
- В Safari и Chrome значение
wheelDeltaсоставляет 3 вместо 120 для колесика мыши. - В Firefox
detailобычно2, иногда1, но при очень медленной прокрутке NO HANDLER FIRES FIRES AT ALL.
Итак, вопрос:
Каков наилучший способ отличить это поведение (в идеале без какого-либо пользовательского агента или обнюхивания операционной системы)?