Apakah ada cara cepat & mudah untuk melakukan ini di jQuery yang saya lewatkan?
Saya tidak ingin menggunakan acara mouseover karena saya sudah menggunakannya untuk hal lain. Saya hanya perlu tahu apakah mouse berada di atas elemen pada saat tertentu.
Saya ingin melakukan sesuatu seperti ini, jika saja ada fungsi "IsMouseOver":
function hideTip(oi) {
setTimeout(function() { if (!IsMouseOver(oi)) $(oi).fadeOut(); }, 100);
}
Jawaban:
Tetapkan batas waktu pada mouseout ke fadeout dan simpan nilai kembali ke data dalam objek. Kemudian, padamouseover, batalkan batas waktu jika ada nilai dalam data.
Hapus data pada panggilan balik fadeout.
Sebenarnya lebih murah menggunakan mouseenter / mouseleave karena mereka tidak memecat menu ketika anak-anak mouseover / mouseout fire.
sumber
Kode ini menggambarkan apa yang saya dan Harry happytime coba katakan. Ketika mouse masuk, tooltip keluar, ketika mouse meninggalkannya mengatur penundaan untuk menghilang. Jika mouse memasukkan elemen yang sama sebelum penundaan dipicu, maka kami menghancurkan pelatuk sebelum mematikan menggunakan data yang kami simpan sebelumnya.
sumber
Pemeriksaan kursor yang bersih dan elegan:
sumber
PERINGATAN:
is(':hover')
ditinggalkan dalam jquery 1.8+. Lihat posting ini untuk solusinya.Anda juga dapat menggunakan jawaban ini: https://stackoverflow.com/a/6035278/8843 untuk menguji apakah mouse mengarahkan elemen:
sumber
:hover
bukan pemilih jQuery yang valid: api.jquery.com/category/selectors (sumber: bugs.jquery.com/ticket/11574 )document.querySelectorAll(':hover')
Anda dapat menggunakan
hover
acara jQuery untuk melacak secara manual:sumber
$.data
tidak melibatkan manipulasi string.Saya membutuhkan sesuatu yang persis seperti ini (di lingkungan yang sedikit lebih kompleks dan solusi dengan banyak 'mouseenters' dan 'mouseleave' tidak berfungsi dengan baik) jadi saya membuat plugin jquery kecil yang menambahkan metode ismouseover. Sejauh ini telah bekerja dengan cukup baik.
Kemudian di sembarang tempat dokumen Anda menyebutnya seperti ini dan mengembalikan benar atau salah:
Saya mengujinya pada IE7 +, Chrome 1+ dan Firefox 4 dan berfungsi dengan baik.
sumber
Di jQuery Anda bisa menggunakan .is (': hover'), jadi
sekarang akan menjadi cara paling ringkas untuk menyediakan fungsi yang diminta dalam OP.
Catatan: Di atas tidak berfungsi di IE8 atau lebih rendah
Sebagai alternatif yang tidak terlalu ringkas yang berfungsi di IE8 (jika saya bisa mempercayai modus IE8 IE9), dan melakukannya tanpa memicu di
$(...).hover(...)
semua tempat, juga tidak perlu mengetahui pemilih untuk elemen (dalam hal ini jawaban Ivo lebih mudah):sumber
$(':hover')
tidak berfungsi di IE8. Ini adalah pemilih pseudo CSS2 yang valid, jadi itu harus bekerja.Saya mengambil ide SLaks dan membungkusnya dalam kelas kecil .
sumber
Saya membuat plugin jQuery yang dapat melakukan ini dan banyak lagi. Di plugin saya, untuk mendapatkan semua elemen kursor saat ini berada di atas, cukup lakukan hal berikut:
Seperti yang saya sebutkan, ia juga memiliki banyak kegunaan lain seperti yang Anda lihat di
jsFiddle ditemukan di sini
sumber
Karena saya tidak dapat berkomentar, maka saya akan menulis ini sebagai jawaban!
Harap mengerti perbedaan antara pemilih css ": hover" dan acara hover!
": hover" adalah pemilih css dan benar-benar dihapus dengan acara ketika digunakan seperti ini
$("#elementId").is(":hover")
, tetapi artinya itu tidak ada hubungannya dengan acara jQuery.jika Anda kode
$("#elementId:hover")
, elemen hanya akan dipilih ketika Anda membawa mouse. pernyataan di atas akan bekerja dengan semua versi jQuery saat Anda memilih elemen ini dengan pilihan css murni dan sah.Di sisi lain acara melayang yang
memang dicabut sebagai jQuery 1.8 di sini status dari situs web jQuery:
Mengapa mereka menghapus penggunaannya adalah (": hover") tidak jelas tetapi oh well, Anda masih dapat menggunakannya seperti di atas dan di sini ada sedikit retasan untuk tetap menggunakannya.
Oh dan saya tidak akan merekomendasikan versi timeout karena ini membawa banyak kompleksitas , gunakan fungsi timeout untuk hal-hal semacam ini jika tidak ada cara lain dan percayalah, pada 95% dari semua kasus ada cara lain !
Semoga saya bisa membantu beberapa orang di luar sana.
Greetz Andy
sumber
Terima kasih untuk kalian berdua. Pada titik tertentu saya harus menyerah untuk mencoba mendeteksi apakah mouse masih melebihi elemen. Saya tahu ini mungkin, tetapi mungkin membutuhkan terlalu banyak kode untuk diselesaikan.
Butuh beberapa saat, tetapi saya menerima kedua saran Anda dan menemukan sesuatu yang akan bekerja untuk saya.
Berikut ini contoh sederhana (tetapi fungsional):
Dan kemudian untuk membuat ini bekerja pada beberapa teks, ini yang harus saya lakukan:
Seiring dengan banyak CSS mewah, ini memungkinkan beberapa tooltips bantuan mouseover yang sangat bagus. Ngomong-ngomong, saya perlu penundaan di mouseout karena ada celah kecil antara kotak centang dan teks yang menyebabkan bantuan untuk flash saat Anda memindahkan mouse. Tapi ini bekerja seperti pesona. Saya juga melakukan hal serupa untuk acara fokus / blur.
sumber
Saya melihat timeout banyak digunakan untuk ini, tetapi dalam konteks suatu peristiwa, tidak bisakah Anda melihat koordinat, seperti ini ?:
Bergantung pada konteks, Anda mungkin perlu memastikan (ini == e.target) sebelum memanggil areXYInside (e).
fyi- Saya melihat menggunakan pendekatan ini di dalam penangan dragLeave, untuk mengkonfirmasi bahwa acara dragLeave tidak dipicu dengan masuk ke elemen anak. Jika Anda tidak memastikan bahwa Anda masih berada di dalam elemen induk, Anda mungkin keliru mengambil tindakan yang dimaksudkan hanya ketika Anda benar-benar meninggalkan orangtua.
EDIT: ini ide yang bagus, tetapi tidak bekerja cukup konsisten. Mungkin dengan beberapa penyesuaian kecil.
sumber
Anda dapat menguji dengan
jQuery
apakah ada anak div memiliki kelas tertentu. Kemudian dengan menerapkan kelas itu ketika Anda mengarahkan mouse ke luar dan keluar div tertentu, Anda dapat menguji apakah mouse Anda di atasnya, bahkan ketika Anda mengarahkan mouse ke elemen yang berbeda pada halaman apalagi kode dengan cara ini. Saya menggunakan ini karena saya memiliki spasi antara divs dalam pop-up, dan saya hanya ingin menutup pop up ketika saya pindah dari pop up, bukan ketika saya menggerakkan mouse saya di atas ruang di pop up. Jadi saya memanggil fungsi mouseover pada div konten (yang pop up selesai), tetapi hanya akan memicu fungsi close ketika saya moused-over div konten, DAN berada di luar pop up!sumber
Ini akan menjadi cara termudah untuk melakukannya!
sumber
Berikut adalah teknik yang tidak bergantung pada jquery dan menggunakan
matches
API DOM asli . Ini menggunakan awalan vendor untuk mendukung browser kembali ke IE9. Lihat matchesselector di caniuse.com untuk detail lengkap.Pertama buat fungsi matchSelector, seperti:
Kemudian, untuk mendeteksi kursor:
sumber
Saya telah menjawab ini dalam pertanyaan lain, dengan semua perincian yang mungkin Anda butuhkan:
Mendeteksi JIKA melayang di atas elemen dengan jQuery (memiliki 99 upvotes pada saat penulisan)
Pada dasarnya, Anda dapat melakukan sesuatu seperti:
Ini hanya berfungsi jika
oi
objek jQuery berisi elemen tunggal. Jika ada beberapa elemen yang cocok, Anda perlu menerapkan ke setiap elemen, misalnya:Ini diuji mulai jQuery 1.7.
sumber
Berikut adalah fungsi yang membantu Anda memeriksa apakah mouse ada di dalam elemen atau tidak. Satu-satunya hal yang harus Anda lakukan adalah memanggil fungsi tempat Anda dapat memiliki EventObject yang berhubungan dengan mouse. sesuatu seperti ini:
Anda dapat melihat kode sumber di sini di github atau di bagian bawah posting:
https://github.com/mostafatalebi/ElementsLocator/blob/master/elements_locator.jquery.js
sumber
Memperluas apa yang dikatakan 'Happytime harry', pastikan untuk menggunakan fungsi jquery .data () untuk menyimpan id batas waktu. Ini agar Anda dapat mengambil id timeout dengan sangat mudah ketika 'mouseenter' dipicu pada elemen yang sama nanti, memungkinkan Anda untuk menghilangkan pelatuk agar tooltip Anda menghilang.
sumber
Anda dapat menggunakan acara mouseenter dan mouseleave jQuery. Anda dapat mengatur bendera saat mouse memasuki area yang diinginkan dan menghapus flag saat meninggalkan area.
sumber
Saya menggabungkan ide-ide dari topik ini dan menghasilkan ini, yang berguna untuk menunjukkan / menyembunyikan submenu:
Tampaknya bekerja untuk saya. Semoga ini bisa membantu seseorang.
EDIT: Sekarang menyadari pendekatan ini tidak berfungsi dengan benar di IE.
sumber
Saya tidak dapat menggunakan saran di atas.
Mengapa saya lebih suka solusi saya?
Metode ini memeriksa apakah mouse berada di atas elemen kapan saja dipilih oleh Anda .
Mouseenter dan : melayang - layang itu keren, tetapi mouseenter terpicu hanya jika Anda menggerakkan mouse, bukan ketika elemen bergerak di bawah mouse.
: melayang-layang cukup manis tapi ... IE
Jadi saya melakukan ini:
Tidak 1. simpan mouse x, posisi y setiap kali dipindahkan saat Anda perlu,
Tidak. 2. periksa apakah mouse berada di atas elemen yang cocok dengan kueri, lakukan hal-hal ... seperti memicu acara mouseenter
sumber
Hanya catatan tentang jawaban Arthur Goldsmith yang populer dan membantu di atas: Jika Anda menggerakkan mouse Anda dari satu elemen ke elemen lain di IE (setidaknya hingga IE 9), Anda mungkin mengalami masalah untuk membuatnya berfungsi dengan benar jika elemen baru tersebut memiliki latar belakang transparan (yang akan secara default). Solusi saya adalah memberi elemen baru gambar latar belakang transparan.
sumber
BIOLA
sumber
Anda dapat menggunakan
is(':visible');
di jquery Dan untuk $ ('. Item: hover') itu juga berfungsi di Jquery.ini adalah snnipet kode htm:
dan ini adalah Kode JS:
ini yang saya bicarakan :)
sumber