Saya mencoba menangkap peristiwa mouse pada suatu elemen dengan elemen lain yang benar-benar diposisikan di atasnya.
Saat ini, peristiwa pada elemen yang benar-benar diposisikan memukul dan melambung ke induknya, tapi saya ingin itu menjadi "transparan" untuk peristiwa mouse ini dan meneruskannya ke apa pun yang ada di belakangnya. Bagaimana saya harus menerapkan ini?
pointer-events
ada! Saya dapat mengalihkan jawaban yang diterima ke yang ini di beberapa titik.pointer-events
masih tidak super luar biasa , tetapi semakin baik. Untuk opsi yang lebih kompatibel, buka dengan jawaban @ JedSchmidt.Jika semua yang Anda butuhkan adalah mousedown, Anda mungkin dapat puas dengan
document.elementFromPoint
metode ini, dengan:x
dany
koordinat dari acara kedocument.elementFromPoint
metode untuk mendapatkan elemen di bawahnya, dan kemudiansumber
Juga menyenangkan untuk diketahui ...
Pointer-events dapat dinonaktifkan untuk elemen induk (mungkin transparan div) dan belum diaktifkan untuk elemen anak. Ini berguna jika Anda bekerja dengan beberapa lapisan div yang tumpang tindih, tempat Anda ingin dapat mengeklik elemen turunan dari lapisan apa pun. Untuk ini, semua parenting div dapatkan
pointer-events: none
dan klik-anak-anak mendapatkan pointer-events diaktifkan kembali olehpointer-events: all
sumber
pointer-events:none
dan penurunan yang cepat karena memiliki simpul anak-anak yang terpengaruh, Anda menyelamatkan hari itu :).parent * { pointer-events:all; }
untuk anak-anak?Alasan Anda tidak menerima acara adalah karena elemen yang diposisikan benar-benar bukan anak dari elemen yang ingin Anda "klik" (blue div). Cara terbersih yang dapat saya pikirkan adalah dengan meletakkan elemen absolut sebagai anak dari yang Anda ingin klik, tapi saya berasumsi Anda tidak dapat melakukan itu atau Anda tidak akan mengirim pertanyaan ini di sini :)
Pilihan lain adalah mendaftarkan pengendali event klik untuk elemen absolut dan memanggil pengendali klik untuk div biru, menyebabkan keduanya flash.
Karena cara acara muncul melalui DOM, saya tidak yakin ada jawaban yang lebih sederhana untuk Anda, tetapi saya sangat ingin tahu apakah ada orang lain yang memiliki trik yang tidak saya ketahui!
sumber
Ada versi javascript yang tersedia yang secara manual mengalihkan acara dari satu div ke yang lain.
Saya membersihkannya dan membuatnya menjadi plugin jQuery.
Inilah repositori Github: https://github.com/BaronVonSmeaton/jquery.forwardevents
Sayangnya, tujuan saya menggunakannya untuk - overlay topeng di Google Maps tidak menangkap peristiwa klik dan seret, dan kursor mouse tidak berubah yang menurunkan pengalaman pengguna yang cukup sehingga saya memutuskan untuk menyembunyikan topeng di bawah IE dan Opera - dua browser yang tidak mendukung acara pointer.
sumber
Jika Anda tahu elemen-elemen yang membutuhkan peristiwa mouse, dan jika overlay Anda transparan, Anda bisa mengatur z-index dari mereka ke sesuatu yang lebih tinggi daripada overlay. Semua acara tentunya harus bekerja dalam kasus itu di semua browser.
sumber