Dla innego pytania ułożyłem tę odpowiedź , w tym ten przykładowy kod .
W tym kodzie używam kółka myszy do powiększania / zmniejszania płótna HTML5. Znalazłem kod, który normalizuje różnice szybkości między przeglądarką Chrome i Firefox. Jednak obsługa zoomu w Safari jest znacznie, znacznie szybsza niż w którymkolwiek z nich.
Oto kod, który obecnie mam:
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
Jakiego kodu mogę użyć, aby uzyskać tę samą wartość „delta” dla tej samej ilości ruchu kółka myszy w przeglądarkach Chrome 10/11, Firefox 4, Safari 5, Opera 11 i IE9?
To pytanie jest powiązane, ale nie ma dobrej odpowiedzi.
Edytować : dalsze badanie pokazuje, że jedno zdarzenie przewijania „w górę” to:
| 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 (prawdopodobnie źle) Chrome v37 / OS X | 120 | 0 IE9 / Win7 | 120 | nieokreślony Opera v11 / OS X | 40 | -1 Opera v24 / OS X | 120 | 0 Opera v11 / Win7 | 120 | -3 Firefox v4 / Win7 | niezdefiniowany | -3 Firefox v4 / OS X | niezdefiniowany | -1 Firefox v30 / OS X | niezdefiniowany | -1
Co więcej, używanie gładzika MacBooka w systemie OS X daje różne rezultaty, nawet przy powolnym ruchu:
- W Safari i Chrome
wheelDelta
jest to wartość 3 zamiast 120 dla kółka myszy. - W przeglądarce Firefox
detail
jest to zwykle2
, czasami1
, ale przy bardzo powolnym przewijaniu ŻADNY WYDARZENIE NIE POWODUJE .
Więc pytanie brzmi:
Jaki jest najlepszy sposób na rozróżnienie tego zachowania (najlepiej bez żadnego klienta użytkownika lub podsłuchiwania systemu operacyjnego)?
e.wheelDelta/120
?