Saya punya div
yang punya background:transparent
, bersama dengan border
. Di bawah ini div
, saya memiliki lebih banyak elemen.
Saat ini, saya bisa mengklik elemen yang mendasarinya ketika saya mengklik di luar hamparan div
. Namun, saya tidak dapat mengklik elemen yang mendasarinya ketika mengklik langsung pada overlay div
.
Saya ingin dapat mengklik ini div
sehingga saya bisa mengklik elemen yang mendasarinya.
Juga menyenangkan untuk diketahui ...
Anda dapat menonaktifkan pointer-events dalam elemen induk (mungkin div transparan) tetapi masih mengaktifkannya untuk elemen turunannya.
Ini berguna jika Anda bekerja dengan beberapa lapisan div yang tumpang tindih, di mana Anda ingin dapat mengeklik elemen anak, sambil membiarkan lapisan induk tidak bereaksi pada peristiwa mouse sama sekali.
Untuk ini, dapatkan semua parenting divs
pointer-events: none
dan anak-anaknya yang dapat diklik mendapatkan pointer-events diaktifkan kembali olehpointer-events: auto
sumber
Mengizinkan pengguna mengklik
div
elemen elemen yang mendasarinya tergantung pada browser. Semua browser modern, termasuk Firefox, Chrome, Safari, dan Opera, mengertipointer-events:none
.Untuk IE, itu tergantung pada latar belakang. Jika latar belakangnya transparan, klik per tayang berfungsi tanpa Anda perlu melakukan apa pun. Di sisi lain, untuk sesuatu seperti
background:white; opacity:0; filter:Alpha(opacity=0);
, IE memerlukan penerusan acara manual.Lihat uji JSFiddle dan acara pointer CanIUse .
sumber
Saya menambahkan jawaban ini karena saya tidak melihatnya sepenuhnya di sini. Saya bisa melakukan ini menggunakan elementFromPoint. Pada dasarnya:
Dalam kasus saya, overlay div benar-benar diposisikan — saya tidak yakin apakah ini membuat perbedaan. Ini berfungsi pada IE8 / 9, Safari Chrome dan Firefox setidaknya.
sumber
sumber
$('#elementontop)
seharusnya begitu$('#elementontop')
?Saya perlu melakukan ini dan memutuskan untuk mengambil rute ini:
sumber
Saat ini saya bekerja dengan balon pidato kanvas. Tetapi karena balon dengan pointer dibungkus dengan div, beberapa tautan di bawahnya tidak lagi bisa klik. Saya tidak bisa menggunakan extjs dalam hal ini. Lihat contoh dasar untuk tutorial balon ucapan saya membutuhkan HTML5
Jadi saya memutuskan untuk mengumpulkan semua koordinat tautan dari dalam balon dalam sebuah array.
Saya menyebut fungsi ini pada setiap balon (baru). Itu mengambil koordinat sudut kiri / atas dan kanan / bawah dari link.class - juga atribut nama untuk apa yang harus dilakukan jika seseorang mengklik koordinat itu dan saya suka menetapkan 1 yang artinya tidak diklik jet . Dan lepaskan array ini ke clickarray. Anda juga bisa menggunakan push.
Untuk bekerja dengan array itu:
Fungsi ini membuktikan koordinat acara klik tubuh atau apakah sudah diklik dan mengembalikan atribut nama. Saya pikir tidak perlu masuk lebih dalam, tetapi Anda lihat itu tidak terlalu rumit. Harapan dalam bahasa Inggris ...
sumber
tidak bekerja seperti itu. cara mengatasinya adalah secara manual memeriksa koordinat klik mouse terhadap area yang ditempati oleh setiap elemen.
area yang ditempati oleh suatu elemen dapat ditemukan dengan 1. mendapatkan lokasi elemen sehubungan dengan bagian kiri atas halaman, dan 2. lebar dan tinggi. perpustakaan seperti jQuery membuat ini sangat sederhana, meskipun dapat dilakukan dalam js sederhana. menambahkan event handler untuk
mousemove
didocument
obyek akan memberikan update terus-menerus dari posisi mouse dari atas dan kiri halaman. memutuskan apakah mouse berada di atas objek yang diberikan terdiri dari memeriksa apakah posisi mouse berada di antara tepi kiri, kanan, atas dan bawah suatu elemen.sumber
Tidak, Anda tidak dapat mengeklik elemen 'melalui'. Anda bisa mendapatkan koordinat klik dan mencoba mencari tahu elemen apa yang ada di bawah elemen yang diklik, tetapi ini sangat membosankan untuk browser yang tidak memiliki
document.elementFromPoint
. Maka Anda masih harus meniru tindakan default mengklik, yang tidak selalu sepele tergantung pada elemen apa yang Anda miliki di bawah sana.Karena Anda memiliki area jendela yang sepenuhnya transparan, Anda mungkin akan lebih baik menerapkannya sebagai elemen perbatasan yang terpisah di luar, meninggalkan area pusat bebas dari halangan sehingga Anda dapat benar-benar klik langsung.
sumber
Gagasan lain untuk mencoba (secara situasional) adalah:
Adakah pikiran?
sumber
Saya pikir Anda dapat mempertimbangkan untuk mengubah markup Anda. Jika saya tidak salah, Anda ingin meletakkan lapisan tak terlihat di atas dokumen dan markup tak terlihat Anda mungkin mendahului gambar dokumen Anda (apakah ini benar?).
Sebagai gantinya, saya mengusulkan agar Anda meletakkan yang tidak terlihat tepat setelah gambar dokumen tetapi mengubah posisi menjadi absolut.
Perhatikan bahwa Anda memerlukan elemen induk untuk memiliki posisi: relatif dan kemudian Anda akan dapat menggunakan ide ini. Kalau tidak, lapisan absolut Anda akan ditempatkan tepat di sudut kiri atas.
Semoga ini membantu. Lihat di sini untuk informasi lebih lanjut tentang penentuan posisi CSS.
sumber
Bungkus saja
a
tag di sekitar semua ekstrak HTML, misalnyadalam contoh saya kelas teks saya memiliki efek hover, yang dengan pointer-events: none;Anda hanya akan kalah
membungkus konten akan menjaga efek hover Anda dan Anda dapat mengklik di semua gambar, termasuk div, salam!
sumber
Anda dapat menempatkan hamparan AP seperti ...
letakkan saja di tempat yang tidak Anda inginkan, yaitu berdenting. Berfungsi dalam semua.
sumber
Cara yang lebih mudah adalah dengan inline gambar latar transparan menggunakan URI Data sebagai berikut:
sumber
Saya pikir
event.stopPropagation();
harus disebutkan di sini juga. Tambahkan ini ke fungsi Klik tombol Anda.Mencegah peristiwa menggelegak pohon DOM, mencegah penangan orang tua diberitahu tentang acara tersebut.
sumber
Ini bukan jawaban yang tepat untuk pertanyaan tetapi dapat membantu dalam menemukan solusi untuk itu.
Saya memiliki gambar yang saya sembunyikan pada pemuatan halaman dan ditampilkan saat menunggu panggilan AJAX lalu bersembunyi lagi ...
Saya menemukan satu-satunya cara untuk menampilkan gambar saya ketika memuat halaman kemudian membuatnya menghilang dan dapat mengklik hal-hal di mana gambar itu berada sebelum menyembunyikannya untuk meletakkan gambar ke dalam DIV, membuat ukuran DIV 10x10 piksel atau kecil cukup untuk mencegahnya menyebabkan masalah kemudian menyembunyikan div yang mengandung. Ini memungkinkan gambar meluap div saat terlihat dan ketika div disembunyikan, hanya area div dipengaruhi oleh ketidakmampuan untuk mengklik objek di bawah dan bukan seluruh ukuran gambar yang DIV isi dan tampilkan.
Saya mencoba semua metode untuk menyembunyikan gambar termasuk tampilan CSS = none / block, opacity = 0, menyembunyikan gambar dengan hidden = true. Semuanya menghasilkan gambar saya disembunyikan tetapi area di mana ia ditampilkan untuk bertindak seperti ada penutup atas barang-barang di bawahnya sehingga klik dan sebagainya tidak akan bertindak pada objek yang mendasarinya. Setelah gambar berada di dalam DIV kecil dan saya menyembunyikan DIV kecil itu, seluruh area yang ditempati oleh gambar itu jelas dan hanya area kecil di bawah DIV yang saya sembunyikan yang terpengaruh, tetapi saat saya membuatnya cukup kecil (10x10 piksel), masalahnya telah diperbaiki (semacam).
Saya menemukan ini sebagai solusi kotor untuk apa yang seharusnya menjadi masalah sederhana tapi saya tidak dapat menemukan cara untuk menyembunyikan objek dalam format aslinya tanpa wadah. Objek saya adalah dalam bentuk dll. Jika ada yang memiliki cara yang lebih baik, tolong beri tahu saya.
sumber