Saya sedang menulis situs Web yang dimaksudkan untuk digunakan dari desktop dan tablet. Saat dikunjungi dari desktop, saya ingin area layar yang dapat diklik menyala dengan :hover
efek (warna latar belakang berbeda, dll.) Dengan tablet, tidak ada mouse, jadi saya tidak ingin efek hover apa pun.
Masalahnya adalah, ketika saya mengetuk sesuatu di tablet, peramban ternyata memiliki semacam "kursor mouse tak terlihat" yang bergerak ke lokasi yang saya ketuk, lalu meninggalkannya di sana - jadi benda yang baru saya ketuk menyala dengan arahkan kursor hingga saya mengetuk yang lain.
Bagaimana saya bisa mendapatkan efek hover saat saya menggunakan mouse, tetapi menahannya saat saya menggunakan layar sentuh?
Seandainya seseorang berpikir untuk menyarankannya, saya tidak ingin menggunakan sniffing agen pengguna. Perangkat yang sama dapat memiliki layar sentuh dan mouse (mungkin tidak begitu umum saat ini, tetapi lebih banyak lagi di masa mendatang). Saya tidak tertarik dengan perangkatnya, saya tertarik dengan cara penggunaannya saat ini: mouse atau layar sentuh.
Saya sudah mencoba mengaitkan touchstart
, touchmove
dan touchend
acara dan memanggil preventDefault()
semua dari mereka, yang tidak menekan "tak terlihat kursor mouse" beberapa waktu; tetapi jika saya mengetuk bolak-balik dengan cepat di antara dua elemen yang berbeda, setelah beberapa ketukan, "kursor mouse" akan mulai menggerakkan "kursor mouse" dan tetap menyalakan efek hover - sepertinya saya preventDefault
tidak selalu dihormati. Saya tidak akan membuat Anda bosan dengan detailnya kecuali jika diperlukan - saya bahkan tidak yakin itu pendekatan yang tepat untuk diambil; jika ada yang memiliki perbaikan yang lebih sederhana, saya mendengarkan.
Sunting: Ini dapat direproduksi dengan CSS standar rawa :hover
, tapi berikut repro cepat untuk referensi.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Jika Anda mengarahkan mouse ke salah satu kotak, itu akan mendapatkan latar belakang biru, yang saya inginkan. Tetapi jika Anda mengetuk salah satu kotak, itu juga akan mendapatkan latar belakang biru, yang saya coba cegah.
Saya juga memposting contoh di sini yang melakukan hal di atas dan juga mengaitkan acara mouse jQuery. Anda dapat menggunakannya untuk melihat bahwa peristiwa tap juga akan aktif mouseenter
, mousemove
dan mouseleave
.