Wie kann ich in Javascript / jQuery feststellen, ob das Clientgerät über eine Maus verfügt?
Ich habe eine Website, auf der ein kleines Infofenster angezeigt wird, wenn der Benutzer mit der Maus über ein Element fährt. Ich verwende jQuery.hoverIntent, um den Schwebeflug zu erkennen, aber dies funktioniert offensichtlich nicht auf Touchscreen-Geräten wie iPhone / iPad / Android. Auf diesen Geräten möchte ich also auf tippen zurückgreifen, um das Infofenster anzuzeigen.
javascript
jquery
iphone
android
Brad Robinson
quelle
quelle
:hover
, ist es wahrscheinlich besser (wenn Sie ein Stylesheet für mehrere Geräte codieren), es:hover
für rein kosmetische Zwecke zu verwenden.Antworten:
+1 dafür
hover
undclick
beides. Eine andere Möglichkeit könnte darin bestehen, CSS-Medienabfragen zu verwenden und einige Stile nur für kleinere Bildschirme / Mobilgeräte zu verwenden, bei denen es sich am wahrscheinlichsten um Touch / Tap-Funktionen handelt. Wenn Sie also bestimmte Stile über CSS haben und in jQuery diese Elemente auf die Stileigenschaften für mobile Geräte überprüfen, können Sie sie einbinden, um Ihren mobilen Code zu schreiben.Siehe hier: http://www.forabeautifulweb.com/blog/about/hardboiled_css3_media_queries/
quelle
Hinweis : Nur weil ein Gerät Berührungsereignisse unterstützt, bedeutet dies nicht unbedingt, dass es sich ausschließlich um ein Touchscreen-Gerät handelt. Viele Geräte (wie mein Asus Zenbook) unterstützen sowohl Klick- als auch Berührungsereignisse, auch wenn sie keine tatsächlichen Berührungseingabemechanismen haben. Schließen Sie beim Entwerfen für Touch-Unterstützung immer die Unterstützung von Klickereignissen ein und gehen Sie niemals davon aus, dass es sich bei einem Gerät ausschließlich um das eine oder andere handelt.
quelle
'ontouchstart' in document.documentElement
gibt auf BlackBerry 9300Gefundene Tests für Windows.Touch funktionierten nicht auf Android, aber dies funktioniert:
Siehe Artikel: Wie kann ein Touchscreen-Gerät am besten mit JavaScript erkannt werden?
quelle
Grund für die Verwendung von maxTouchPoints zusammen mit msMaxTouchPoints:
Quelle: http://ctrlq.org/code/19616-detect-touch-screen-javascript
quelle
Funktioniert überall !!
quelle
isTouch = "ontouchstart" in window || navigator.msMaxTouchPoints;
Ich benutze:
in jQuery Mobile 1.0.1
quelle
Google Chrome scheint in diesem Fall falsch positive Ergebnisse zurückzugeben:
Ich nehme an, es hat etwas mit seiner Fähigkeit zu tun, "Berührungsereignisse zu emulieren" (F12 -> Einstellungen in der unteren rechten Ecke -> Registerkarte "Überschreibungen" -> letztes Kontrollkästchen). Ich weiß, dass es standardmäßig deaktiviert ist, aber damit verbinde ich die Änderung der Ergebnisse (die "in" -Methode, die in Chrome verwendet wird). Dies scheint jedoch zu funktionieren, soweit ich getestet habe:
Alle Browser, in denen ich diesen Code ausgeführt habe, geben an, dass der Typ "Objekt" ist, aber ich bin mir sicherer, dass es alles andere als undefiniert ist :-)
Getestet auf IE7, IE8, IE9, IE10, Chrome 23.0.1271.64, Chrome für iPad 21.0.1180.80 und iPad Safari. Es wäre cool, wenn jemand weitere Tests durchführen und die Ergebnisse teilen würde.
quelle
Schrieb dies für eine meiner Websites und ist wahrscheinlich die narrensicherste Lösung. Zumal selbst Modernizr bei der Berührungserkennung falsch positive Ergebnisse erzielen kann.
Wenn Sie jQuery verwenden
oder einfach nur JS ...
quelle
Für meinen ersten Beitrag / Kommentar: Wir alle wissen, dass 'Touchstart' vor dem Klicken ausgelöst wird. Wir wissen auch, dass der Benutzer beim Öffnen Ihrer Seite: 1) die Maus bewegen 2) klicken 3) den Bildschirm berühren (zum Scrollen oder ... :))
Versuchen wir etwas:
// -> Start: jQuery
// <- End: jQuery
Einen schönen Tag noch!
quelle
Ich habe den folgenden Code getestet, der oben in der Diskussion erwähnt wurde
funktioniert auf Android Mozilla, Chrome, Opera, Android Standardbrowser und Safari auf dem iPhone ... alles positiv ...
scheint solide für mich :)
quelle
Ein hilfreicher Blog-Beitrag zu diesem Thema, der aus der Modernizr-Quelle zur Erkennung von Berührungsereignissen verlinkt ist. Fazit: Es ist nicht möglich, Touchscreen-Geräte aus Javascript zuverlässig zu erkennen.
http://www.stucox.com/blog/you-cant-detect-a-touchscreen/
quelle
Das funktioniert bei mir:
quelle
Wenn Sie Modernizr verwenden , ist es
Modernizr.touch
wie bereits erwähnt sehr einfach zu verwenden .Ich bevorzuge jedoch die Verwendung einer Kombination aus
Modernizr.touch
und Testen von Benutzeragenten, um sicher zu gehen.Wenn Sie Modernizr nicht verwenden, können Sie die
Modernizr.touch
obige Funktion einfach durch ersetzen('ontouchstart' in document.documentElement)
Beachten Sie außerdem, dass Sie durch das Testen des Benutzeragenten
iemobile
eine größere Auswahl an erkannten Microsoft-Mobilgeräten erhalten alsWindows Phone
.Siehe auch diese SO-Frage
quelle
In jQuery Mobile können Sie einfach Folgendes tun:
Ich weiß nicht, warum dies so undokumentiert ist. Aber es ist Crossbrowser-sicher (die neuesten 2 Versionen der aktuellen Browser).
quelle
Wie bereits erwähnt, kann ein Gerät sowohl Maus- als auch Berührungseingaben unterstützen. Sehr oft lautet die Frage nicht "Was wird unterstützt", sondern "Was wird derzeit verwendet".
In diesem Fall können Sie einfach Mausereignisse (einschließlich des Hover-Listeners) und Berührungsereignisse registrieren.
JavaScript sollte basierend auf Benutzereingaben automatisch den richtigen Listener aufrufen. Im Falle eines Berührungsereignisses
onTouchStartCallback
wird also ausgelöst und Ihr Hover-Code emuliert.Beachten Sie, dass eine Berührung beide Arten von Zuhörern auslösen kann, Berührung und Maus. Der Touch-Listener geht jedoch zuerst und kann verhindern, dass nachfolgende Maus-Listener durch Aufrufen ausgelöst werden
event.preventDefault()
.Lesen Sie hier weiter .
quelle
Für die iPad-Entwicklung verwende ich:
Ich kann mich dann selektiv an berührungsbasierte Ereignisse (z. B. ontouchstart) oder mausbasierte Ereignisse (z. B. onmousedown) binden. Ich habe noch nicht auf Android getestet.
quelle