Saya menginginkan fungsi yang memberi tahu saya elemen mana kursor mouse berakhir.
Jadi, misalnya, jika mouse pengguna berada di atas area teks ini (dengan id wmd-input
), pemanggilan window.which_element_is_the_mouse_on()
akan secara fungsional setara dengan$("#wmd-input")
javascript
dom
mouse
Tom Lehman
sumber
sumber
event.target
atau apa punevent.target
?event
itu, dan bagaimana hal itu terjadiDi browser yang lebih baru, Anda dapat melakukan hal berikut:
Itu akan memberi Anda NodeList item yang mouse saat ini berada dalam urutan dokumen. Elemen terakhir di NodeList adalah yang paling spesifik, setiap elemen sebelumnya haruslah orang tua, kakek nenek, dan seterusnya.
sumber
<li>
saat di atas<li>
elemen lainnya .$(':hover')
tetapi pada dasarnya sama: jsfiddle.net/pmrotule/2pks4tf6(function(){ var q = document.querySelectorAll(":hover"); return q[q.length-1]; })()
mousemove
mungkin merusak kinerjaMeskipun pertanyaan berikut mungkin tidak benar-benar menjawab pertanyaan, karena ini adalah hasil pertama dari googling (googler mungkin tidak menanyakan pertanyaan yang persis sama :), harap ini akan memberikan masukan tambahan.
Sebenarnya ada dua pendekatan berbeda untuk mendapatkan daftar semua elemen yang mouse saat ini berakhir (untuk browser yang lebih baru, mungkin):
Pendekatan "struktural" - Pohon DOM menaik
Seperti dalam jawaban dherman, seseorang dapat menelepon
Namun, ini mengasumsikan bahwa hanya anak-anak yang akan menghamparkan leluhur mereka, yang biasanya terjadi, tetapi tidak benar secara umum, terutama ketika berhadapan dengan SVG di mana elemen di cabang berbeda dari pohon DOM mungkin saling tumpang tindih.
Pendekatan "visual" - Berdasarkan tumpang tindih "visual"
Metode ini digunakan
document.elementFromPoint(x, y)
untuk menemukan elemen paling atas, menyembunyikannya untuk sementara (karena kami segera memulihkannya dalam konteks yang sama, browser tidak akan benar-benar merendernya), lalu lanjutkan untuk menemukan elemen teratas kedua ... Terlihat sedikit hacky, tetapi ia mengembalikan apa yang Anda harapkan saat ada, misalnya, elemen saudara dalam pohon saling menutupi satu sama lain. Silakan temukan posting ini untuk lebih jelasnya,Cobalah keduanya, dan periksa hasil yang berbeda.
sumber
Document.elementsFromPoint(x, y)
stackoverflow.com/a/31805883/1059828elementFromPoint()
hanya mendapatkan elemen pertama di pohon DOM. Ini sebagian besar TIDAK cukup untuk kebutuhan pengembang. Untuk mendapatkan lebih dari satu elemen pada misalnya posisi penunjuk mouse saat ini, inilah fungsi yang Anda butuhkan:Ini mengembalikan larik semua objek elemen di bawah titik yang diberikan. Cukup berikan nilai X dan Y mouse ke fungsi ini.
Info lebih lanjut di sini: https://developer.mozilla.org/en-US/docs/Web/API/document/elementsFromPoint
Untuk browser yang sangat lama yang tidak didukung, Anda dapat menggunakan jawaban ini sebagai fallback.
sumber
Arahkan kursor ke gelembung acara, sehingga Anda dapat meletakkan satu pendengar di badan dan menunggu sampai mereka menggelembung, lalu ambil
event.target
atauevent.srcElement
:sumber
document.elementFromPoint(x, y)
.Kode berikut akan membantu Anda mendapatkan elemen penunjuk mouse. Elemen yang dihasilkan akan ditampilkan di konsol.
sumber
e.clientX
dane.clientY
sebagai gantinya (diuji di Firefox 59).Anda dapat melihat target
mouseover
acara pada beberapa leluhur yang sesuai:Berikut demo nya.
sumber
sumber
DEMO: D Gerakkan mouse Anda di jendela cuplikan: D
sumber
Target
mousemove
acara DOM adalah elemen DOM paling atas di bawah kursor saat mouse bergerak:Ini mirip dengan solusi @Philip Walton, tetapi tidak memerlukan jQuery atau setInterval.
sumber
Anda dapat menggunakan selektor ini untuk merusak objek dan kemudian memanipulasinya sebagai objek jquery.
$(':hover').last();
sumber
Izinkan saya memulai dengan mengatakan bahwa saya tidak merekomendasikan penggunaan metode yang akan saya sarankan. Ini jauh lebih baik untuk penggunaan event driven pengembangan dan mengikat peristiwa hanya untuk elemen Anda tertarik untuk mengetahui apakah atau tidak mouse di atas dengan
mouseover
,mouseout
,mouseenter
,mouseleave
, dllJika Anda benar-benar HARUS memiliki kemampuan untuk mengetahui elemen mana yang dilewati mouse, Anda perlu menulis fungsi yang mengikat
mouseover
acara ke semua yang ada di DOM, lalu menyimpan apa pun elemen saat ini di beberapa variabel.Anda bisa melakukan sesuatu seperti ini:
Pada dasarnya, saya telah membuat fungsi langsung yang menyetel acara di semua elemen dan menyimpan elemen saat ini di dalam closure untuk meminimalkan footprint Anda.
Berikut adalah demo yang berfungsi
window.which_element_is_the_mouse_on
setiap detik dan mencatat elemen apa yang mouse saat ini ke konsol.http://jsfiddle.net/LWFpJ/1/
sumber
Pertanyaan lama tapi inilah solusi bagi mereka yang mungkin masih berjuang. Anda ingin menambahkan
mouseover
acara pada elemen 'induk' dari elemen anak yang ingin Anda deteksi. Kode di bawah ini menunjukkan kepada Anda bagaimana melakukannya.DEMO DI CODEPEN
sumber