Di Javascript / jQuery, bagaimana saya bisa mendeteksi jika perangkat klien memiliki mouse?
Saya punya situs yang menampilkan panel info kecil ketika pengguna mengarahkan mouse mereka ke suatu item. Saya menggunakan jQuery.hoverIntent untuk mendeteksi hover, tetapi ini jelas tidak bekerja pada perangkat layar sentuh seperti iPhone / iPad / Android. Jadi pada perangkat itu saya ingin kembali ketuk untuk menampilkan panel info.
javascript
jquery
iphone
android
Brad Robinson
sumber
sumber
:hover
, mungkin lebih baik (ketika mengkodekan satu stylesheet untuk beberapa perangkat) untuk digunakan:hover
hanya untuk keperluan kosmetik.Jawaban:
+1 untuk melakukan
hover
danclick
keduanya. Salah satu cara lain bisa menggunakan kueri media CSS dan menggunakan beberapa gaya hanya untuk layar / perangkat seluler yang lebih kecil, yang mana yang paling mungkin memiliki fungsi sentuh / ketuk. Jadi, jika Anda memiliki beberapa gaya spesifik melalui CSS, dan dari jQuery Anda memeriksa elemen-elemen tersebut untuk properti gaya perangkat seluler yang dapat Anda kaitkan ke dalamnya untuk menulis kode khusus seluler Anda.Lihat di sini: http://www.forabeautifulweb.com/blog/about/hardboiled_css3_media_queries/
sumber
Catatan : Hanya karena perangkat mendukung acara sentuh tidak berarti perangkat itu hanya perangkat layar sentuh. Banyak perangkat (seperti Asus Zenbook saya) mendukung acara klik dan sentuh, bahkan ketika mereka tidak memiliki mekanisme input sentuh yang sebenarnya. Saat merancang untuk dukungan sentuh, selalu sertakan dukungan acara klik dan jangan pernah menganggap perangkat apa pun secara eksklusif salah satunya.
sumber
'ontouchstart' in document.documentElement
salah mengembalikan true pada BlackBerry 9300Ditemukan pengujian untuk window.Touch tidak berfungsi di Android tetapi ini berfungsi:
Lihat artikel: Apa cara terbaik untuk mendeteksi perangkat 'layar sentuh' menggunakan JavaScript?
sumber
Alasan untuk menggunakan maxTouchPoints bersama dengan msMaxTouchPoints:
Sumber: http://ctrlq.org/code/19616-detect-touch-screen-javascript
sumber
Bekerja di mana saja !!
sumber
isTouch = "ontouchstart" in window || navigator.msMaxTouchPoints;
Saya menggunakan:
di jQuery mobile 1.0.1
sumber
Google Chrome tampaknya mengembalikan hasil positif yang salah:
Saya kira itu ada hubungannya dengan kemampuannya untuk "meniru acara sentuh" (F12 -> pengaturan di sudut kanan bawah -> "menimpa" tab -> kotak centang terakhir). Saya tahu ini dinonaktifkan secara default, tetapi itulah yang saya sambungkan dengan perubahan hasil (metode "dalam" yang digunakan untuk bekerja di Chrome). Namun, ini tampaknya berhasil, sejauh yang saya uji:
Semua browser saya sudah menjalankan kode itu pada status typeof adalah "objek" tapi saya merasa lebih yakin mengetahui bahwa itu adalah apa pun kecuali yang tidak terdefinisi :-)
Diuji pada IE7, IE8, IE9, IE10, Chrome 23.0.1271.64, Chrome untuk iPad 21.0.1180.80 dan iPad Safari. Akan lebih keren jika seseorang melakukan beberapa tes lagi dan membagikan hasilnya.
sumber
Tulis ini untuk salah satu situs saya dan mungkin merupakan solusi paling mudah. Terutama karena bahkan Modernizr bisa mendapatkan hasil positif palsu pada deteksi sentuhan.
Jika Anda menggunakan jQuery
atau hanya JS murni ...
sumber
Untuk posting / komentar pertama saya: Kita semua tahu bahwa 'touchstart' dipicu sebelum klik. Kita juga tahu bahwa ketika pengguna membuka halaman Anda ia akan: 1) menggerakkan mouse 2) klik 3) sentuh layar (untuk menggulir, atau ... :))
Mari kita coba sesuatu:
// -> Mulai: jQuery
// <- Akhir: jQuery
Semoga harimu menyenangkan!
sumber
Saya telah menguji kode berikut yang disebutkan di atas dalam diskusi
bekerja di android Mozilla, chrome, Opera, browser default android dan safari di iphone ... semua positif ...
tampaknya solid untukku :)
sumber
Posting blog bermanfaat tentang subjek, yang ditautkan dari dalam sumber Modernizr untuk mendeteksi acara sentuh. Kesimpulan: Tidak mungkin mendeteksi perangkat layar sentuh dengan andal dari Javascript.
http://www.stucox.com/blog/you-cant-detect-a-touchscreen/
sumber
Ini bekerja untuk saya:
sumber
Jika Anda menggunakan Modernizr , sangat mudah digunakan
Modernizr.touch
seperti yang disebutkan sebelumnya.Namun, saya lebih suka menggunakan kombinasi
Modernizr.touch
dan pengujian agen pengguna, hanya agar aman.Jika Anda tidak menggunakan Modernizr, Anda cukup mengganti
Modernizr.touch
fungsi di atas dengan('ontouchstart' in document.documentElement)
Perhatikan juga bahwa pengujian agen pengguna
iemobile
akan memberi Anda jangkauan yang lebih luas dari perangkat seluler Microsoft yang terdeteksiWindows Phone
.Lihat juga pertanyaan SO ini
sumber
Di jQuery Mobile, Anda cukup melakukan:
Tidak tahu mengapa ini sangat tidak berdokumen .. tetapi crossbrowser aman (2 versi terbaru dari browser saat ini).
sumber
Seperti yang telah disebutkan, perangkat dapat mendukung input mouse dan sentuh. Sangat sering, pertanyaannya bukan "apa yang didukung" tetapi "apa yang saat ini digunakan".
Untuk kasus ini, Anda cukup mendaftarkan acara mouse (termasuk pendengar melayang) dan menyentuh acara yang sama.
JavaScript harus secara otomatis memanggil pendengar yang benar berdasarkan input pengguna. Jadi, dalam hal acara sentuhan,
onTouchStartCallback
akan dipecat, meniru kode hover Anda.Perhatikan bahwa sentuhan dapat memunculkan kedua jenis pendengar, sentuhan dan mouse. Namun, pendengar sentuh masuk terlebih dahulu dan dapat mencegah pendengar mouse berikutnya menembak dengan memanggil
event.preventDefault()
.Bacaan lebih lanjut di sini .
sumber
Untuk pengembangan iPad saya menggunakan:
Saya kemudian dapat secara selektif mengikat acara berbasis sentuhan (misalnya ontouchstart) atau acara berbasis mouse (misalnya onmousedown). Saya belum diuji di Android.
sumber