Untuk pertanyaan lain, saya menulis jawaban ini , termasuk kode sampel ini .
Dalam kode itu saya menggunakan roda mouse untuk memperbesar / memperkecil Kanvas HTML5. Saya menemukan beberapa kode yang menormalkan perbedaan kecepatan antara Chrome dan Firefox. Namun, penanganan zoom di Safari jauh, jauh lebih cepat daripada di keduanya.
Berikut kode yang saya miliki saat ini:
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
Kode apa yang dapat saya gunakan untuk mendapatkan nilai 'delta' yang sama untuk jumlah roda mouse yang sama di Chrome v10 / 11, Firefox v4, Safari v5, Opera v11 dan IE9?
Pertanyaan ini terkait, tetapi tidak memiliki jawaban yang baik.
Sunting : Investigasi lebih lanjut menunjukkan bahwa satu acara gulir 'atas' adalah:
| 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 (mungkin salah) Chrome v37 / OS X | 120 | 0 IE9 / Win7 | 120 | tidak terdefinisi 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
Selanjutnya, menggunakan trackpad MacBook pada OS X memberikan hasil yang berbeda bahkan ketika bergerak lambat:
- Pada Safari dan Chrome,
wheelDelta
nilai 3 bukannya 120 untuk roda mouse. - Pada Firefox
detail
biasanya2
, kadang-kadang1
, tetapi ketika menggulir sangat lambat TIDAK ADA PENANGANAN ACARA YANG SAMA SEKALI .
Jadi pertanyaannya adalah:
Apa cara terbaik untuk membedakan perilaku ini (idealnya tanpa agen pengguna atau OS sniffing)?
e.wheelDelta/120
?