Saat bekerja dengan acara browser, saya mulai memasukkan touchEvents Safari untuk perangkat seluler. Saya menemukan bahwa addEventListener
s sedang menumpuk dengan conditional. Proyek ini tidak dapat menggunakan JQuery.
Pendengar acara standar:
/* option 1 */
window.addEventListener('mousemove', this.mouseMoveHandler, false);
window.addEventListener('touchmove', this.mouseMoveHandler, false);
/* option 2, only enables the required event */
var isTouchEnabled = window.Touch || false;
window.addEventListener(isTouchEnabled ? 'touchmove' : 'mousemove', this.mouseMoveHandler, false);
JQuery's bind
memungkinkan beberapa acara, seperti:
$(window).bind('mousemove touchmove', function(e) {
//do something;
});
Apakah ada cara untuk menggabungkan kedua pendengar acara seperti pada contoh JQuery? ex:
window.addEventListener('mousemove touchmove', this.mouseMoveHandler, false);
Setiap saran atau kiat sangat dihargai!
javascript
jquery
touch
addeventlistener
johnkreitlow
sumber
sumber
Jawaban:
Di POJS, Anda menambahkan satu pendengar sekaligus. Tidak umum untuk menambahkan pendengar yang sama untuk dua acara berbeda pada elemen yang sama. Anda dapat menulis fungsi kecil Anda sendiri untuk melakukan pekerjaan itu, misalnya:
Semoga ini menunjukkan konsepnya.
Edit 2016-02-25
Komentar Dalgard membuat saya meninjau kembali ini. Saya kira menambahkan pendengar yang sama untuk beberapa acara pada satu elemen lebih umum sekarang untuk mencakup berbagai jenis antarmuka yang digunakan, dan jawaban Isaac menawarkan penggunaan metode built-in yang baik untuk mengurangi kode (meskipun lebih sedikit kode, dengan sendirinya , belum tentu bonus). Diperpanjang dengan fungsi panah ECMAScript 2015 memberi:
Strategi serupa dapat menambahkan pendengar yang sama ke banyak elemen, tetapi kebutuhan untuk melakukan itu mungkin merupakan indikator untuk delegasi acara.
sumber
"It is not common to add the same listener for two different events on the same element."
Kadang-kadang (lebih hijau) devs perlu mendengar ini untuk mengetahui bahwa mereka melakukannya dengan benar :)Beberapa sintaks kompak yang mencapai hasil yang diinginkan, POJS:
sumber
['mousemove', 'touchmove'].forEach(...)
['mousemove', 'touchmove'].forEach(function(event) { window.addEventListener(event, handler);});
tidak hanya akan jauh lebih mudah dibaca tetapi juga akan jauh lebih cepat tidak harus memisahkan string dan kemudian menjalankan fungsi untuk setiap item dalam array yang dihasilkan.Membersihkan jawaban Ishak:
EDIT
Fungsi pembantu ES6:
sumber
Untuk saya; kode ini berfungsi dengan baik dan merupakan kode terpendek untuk menangani beberapa peristiwa dengan fungsi (inline) yang sama.
sumber
ES2015:
sumber
for...of
loopSaya punya solusi yang lebih sederhana untuk Anda:
Saya sudah menguji ini dan ini bekerja dengan baik, di sisi positifnya itu ringkas dan tidak rumit seperti contoh lain di sini.
sumber
AddEventListener mengambil string sederhana yang mewakili event.type . Jadi, Anda perlu menulis fungsi khusus untuk beralih pada beberapa peristiwa.
Ini sedang ditangani di jQuery dengan menggunakan .split ("") dan kemudian mengulangi daftar untuk mengatur eventListeners untuk masing-masing
types
.sumber
Salah satu cara melakukannya:
sumber