Cara bermain Estafet Klik
- Baca instruksi level. Di arena ada kotak bersarang (mis. rumah, ruang, meja, tombol) dan daftar elemen yang akan diklik.
- Tulis JavaScript biasa.
document.querySelector,addEventListener,removeEventListener,closest, dandatasettersedia di DOM mini game ini.catat(...)menulis satu baris catatan. - Setelah kodemu jalan, game mengklik elemen yang disebut level. Tongkat estafet berjalan sekali: turun (capture), di target, lalu naik (bubble), dan setiap listener yang jalan diberi nomor.
- Bandingkan daftar Dicari dengan Punyamu. Yang dicek adalah catatanmu dan urutan listener yang jalan, termasuk fasenya.
- Tekan Cek jawaban atau Ctrl + Enter. Kalau buntu, buka Petunjuk. Petunjuk pertama mengarahkan, petunjuk terakhir hampir menjawab.
- Level yang sudah selesai tetap tercentang saat kamu kembali dengan browser yang sama.
Yang kamu pelajari
- Level 1
addEventListener
Memasang fungsi yang dijalankan setiap kali event tertentu terjadi di elemen itu.
- Level 2
Event bubbling
Setelah sampai di target, event naik ke setiap elemen yang membungkusnya sampai
document. - Level 3
target dan currentTarget
event.targetadalah elemen yang diklik.event.currentTargetadalah elemen yang memasang listener yang sedang jalan. - Level 4
Fase capture
Sebelum naik, event turun dari
documentke target. Listener dengan{ capture: true }jalan di perjalanan turun ini. - Level 5
eventPhase
Bernilai 1 saat capture, 2 di target, dan 3 saat bubble. Satu elemen bisa menerima event di dua fase.
- Level 6
stopPropagation
Menghentikan event pindah ke elemen berikutnya. Listener lain di elemen yang sama tetap jalan.
- Level 7
Berhenti saat capture
stopPropagation()di fase capture membuat event tidak pernah sampai ke target. - Level 8
stopImmediatePropagation
Seperti
stopPropagation, ditambah listener berikutnya di elemen yang sama juga tidak jalan. - Level 9
Opsi once
{ once: true }melepas listener otomatis setelah jalan sekali. - Level 10
removeEventListener
Hanya melepas listener dengan jenis event, fungsi, dan opsi capture yang sama persis.
- Level 11
Event delegation
Satu listener di induk menangani klik semua anaknya, termasuk anak yang ditambahkan belakangan.
- Level 12
closest
Naik dari
event.targetke leluhur terdekat yang cocok dengan selector, ataunullkalau tidak ada.
Satu klik, tiga fase
Klik di tombol berjalan seperti estafet. Event mulai dari document, turun lewat rumah, ruang, dan meja (capture), sampai di tombol (target), lalu naik lagi lewat meja, ruang, rumah, dan document (bubble). Listener biasa hanya jalan saat naik, jadi listener di rumah jalan setelah listener di tombol.
Karena setiap klik di dalam induk pasti naik ke induk itu, kamu cukup memasang satu listener di induk lalu membaca event.target. Itulah event delegation, dan itu sebabnya item yang ditambahkan belakangan tetap tertangani tanpa listener baru.
Tanya jawab
Apakah harus daftar akun untuk bermain?
Tidak. Semua level bisa dimainkan tanpa akun. Kemajuanmu disimpan di browser yang kamu pakai, jadi akan hilang kalau data browser dihapus.
Apakah kodeku dijalankan di DOM halaman ini?
Tidak. Kodemu jalan di Web Worker yang terisolasi, dan Worker tidak punya DOM. Game ini menyediakan DOM mini yang meniru urutan event browser: capture, target, dan bubble, beserta stopPropagation, once, dan closest. Selector yang didukung hanya tag, #id, .kelas, atribut, dan spasi untuk keturunan.
Apa beda stopPropagation dan preventDefault?
stopPropagation menghentikan perjalanan event ke elemen lain. preventDefault membatalkan aksi bawaan browser, misalnya pindah halaman saat link diklik atau kirim form, tanpa menghentikan perjalanannya. Keduanya tidak saling menggantikan.
Kenapa removeEventListener tidak melepas listener-ku?
Fungsi dan opsi capture-nya harus sama dengan saat dipasang. Fungsi anonim yang ditulis ulang adalah fungsi baru, jadi tidak akan cocok. Simpan fungsinya di variabel, dan sertakan { capture: true } kalau dulu dipasang di fase capture.
Kapan sebaiknya memakai event delegation?
Saat banyak elemen serupa butuh listener yang sama, misalnya baris tabel atau item daftar, terutama kalau item bisa ditambah atau dihapus. Pakai closest supaya klik di ikon atau teks di dalam item tetap dikenali.