Saya tidak mencari tindakan untuk dipanggil saat melayang, melainkan cara untuk mengetahui apakah suatu elemen sedang melayang saat ini. Misalnya:
$('#elem').mouseIsOver(); // returns true or false
Apakah ada metode jQuery yang melakukan ini?
javascript
jquery
James Skidmore
sumber
sumber
Jawaban:
Jawaban Asli (Dan Benar):
Anda dapat menggunakan
is()
dan memeriksa pemilih:hover
.Contoh: http://jsfiddle.net/Meligy/2kyaJ/3/
(Ini hanya berfungsi ketika pemilih cocok dengan SATU elemen maks. Lihat Edit 3 untuk lebih lanjut)
.
Sunting 1 (29 Juni 2013): (Hanya berlaku untuk jQuery 1.9.x, karena berfungsi dengan 1.10+, lihat Sunting 2 berikutnya)
Jawaban ini adalah solusi terbaik pada saat pertanyaan itu dijawab. Pemilih ': hover' ini dihapus dengan
.hover()
penghapusan metode di jQuery 1.9.x.Menariknya, jawaban terbaru oleh "allicarn" menunjukkan bahwa mungkin untuk digunakan
:hover
sebagai pemilih CSS (vs. Sizzle) ketika Anda awalan dengan pemilih$($(this).selector + ":hover").length > 0
, dan tampaknya berfungsi!Juga, plugin hoverIntent yang disebutkan dalam jawaban lain juga terlihat sangat bagus.
Edit 2 (21 September 2013):
.is(":hover")
berfungsiBerdasarkan komentar lain saya perhatikan bahwa cara asli saya memposting
.is(":hover")
,, sebenarnya masih berfungsi di jQuery, jadi.Ini bekerja di jQuery 1.7.x.
Itu berhenti bekerja di 1.9.1, ketika seseorang melaporkannya kepada saya, dan kami semua berpikir itu terkait dengan jQuery menghapus
hover
alias untuk penanganan acara di versi itu.Ini berfungsi lagi di jQuery 1.10.1 dan 2.0.2 (mungkin 2.0.x), yang menunjukkan bahwa kegagalan pada 1.9.x adalah bug atau bukan perilaku yang disengaja seperti yang kita pikirkan pada poin sebelumnya.
Jika Anda ingin menguji ini dalam versi jQuery tertentu, cukup buka contoh JSFidlle di awal jawaban ini, ubah ke versi jQuery yang diinginkan dan klik "Run". Jika warna berubah saat melayang, itu berfungsi.
.
Sunting 3 (9 Maret 2014): Ini hanya berfungsi ketika urutan jQuery berisi elemen tunggal
Seperti yang ditunjukkan oleh @Wilmer di komentar, ia memiliki biola yang bahkan tidak bekerja melawan versi jQuery I dan yang lainnya di sini mengujinya. Ketika saya mencoba menemukan apa yang spesial dari kasingnya, saya perhatikan bahwa ia mencoba memeriksa beberapa elemen sekaligus. Ini melempar
Uncaught Error: Syntax error, unrecognized expression: unsupported pseudo: hover
.Jadi, bekerja dengan biolanya, ini TIDAK bekerja:
Sementara ini TIDAK berfungsi:
Ia juga bekerja dengan urutan jQuery yang berisi elemen tunggal, seperti jika pemilih asli hanya cocok dengan satu elemen, atau jika Anda memanggil
.first()
hasilnya, dll.Ini juga direferensikan di JavaScript + Tip & Sumber Daya Newsletter Web saya .
sumber
Syntax Error, unrecognized expression: hover. jquery-1.7.js line 4179
.Menggunakan:
jQuery 1.9+
sumber
Tidak berfungsi di jQuery 1.9. Membuat plugin ini berdasarkan jawaban user2444818.
http://jsfiddle.net/Wp2v4/1/
sumber
Tetapkan bendera pada kursor:
Kemudian, periksa benderamu.
sumber
mouseleave
satu elemen, saya ingin memeriksa untuk melihat apakah mouse masuk elemen tertentu.e.fromElement
dane.toElement
. Apakah itu akan berhasil untuk Anda?.data()
.Perbarui pasangan untuk ditambahkan setelah mengerjakan masalah ini untuk sementara waktu:
Kami menggunakan hoverIntent https://github.com/briancherne/jquery-hoverIntent untuk menyelesaikan masalah bagi kami. Pada dasarnya itu memicu jika gerakan mouse lebih disengaja. (Satu hal yang perlu diperhatikan adalah ia akan memicu kedua mouse memasukkan elemen dan pergi - jika Anda hanya ingin menggunakan satu pass, konstruktor merupakan fungsi kosong)
sumber
Anda dapat memfilter elemen Anda dari semua elemen melayang. Kode bermasalah:
Simpan kode:
Untuk mengembalikan boolean:
sumber
Jawaban yang diterima tidak berfungsi untuk saya di JQuery 2.x
.is(":hover")
mengembalikan false pada setiap panggilan.Saya berakhir dengan solusi yang cukup sederhana yang berfungsi:
sumber
Memperluas jawaban @ Mohamed. Anda bisa menggunakan enkapsulasi kecil
Seperti ini:
Gunakan seperti:
Forked the fiddle: http://jsfiddle.net/cgWdF/1/
sumber
Saya suka tanggapan pertama, tetapi bagi saya itu aneh. Ketika mencoba untuk memeriksa setelah memuat halaman untuk mouse, saya harus memasukkan setidaknya 500 milidetik penundaan untuk itu berfungsi:
http://codepen.io/molokoloco/pen/Grvkx/
sumber
Mengatur bendera per jawaban kinakuta tampaknya masuk akal, Anda dapat menempatkan pendengar pada tubuh sehingga Anda dapat memeriksa apakah ada elemen yang melayang pada saat tertentu.
Namun, bagaimana Anda ingin berurusan dengan node anak? Anda mungkin harus memeriksa apakah elemen tersebut merupakan leluhur dari elemen yang saat ini melayang.
sumber