2010-05-26 6 views
45

In dem Bemühen, den Best Practices zu folgen, versuchen wir, die richtigen JavaScript/jQuery-Ereignisse entsprechend dem von Ihnen verwendeten Gerät zu verwenden. Beispielsweise erstellen wir eine mobile Website mit einem Tag, auf dem ein OnClick- oder Touch-Ereignis angezeigt wird. Im Fall eines iPhone möchten wir das Ereignis "touchstart" verwenden. Wir möchten testen, ob ihr Gerät "Touchstart" unterstützt, bevor wir diesen Handler an das Objekt binden. Wenn nicht, werden wir stattdessen "onclick" binden.Wie Browser für Touchstart-Unterstützung mit JS/jQuery überprüfen?

Was ist der beste Weg, dies zu tun?

Antwort

81

Sie erkennen können, ob das Ereignis wird unterstützt durch:

if ('ontouchstart' in document.documentElement) { 
    //... 
} 

Geben Sie einen Blick auf diesen Artikel:

Die isEventSupported Funktion dort veröffentlicht wurde, ist wirklich gut bei der Erkennung einer Vielzahl von Ereignissen, und es ist Cross-Browser.

+1

Ich bin Art von +1 versucht, aber ich weiß, dass Firefox zurück 'false' hier für die falschen Gründe. Firefox gibt für alle auf diese Weise überprüften Ereignisse false zurück (ich weiß, es ist eine dieser seltenen Situationen, in denen Fx saugt). Der Artikel geht aber darauf ein, also bekommst du deine +1 ;-) –

+0

großartige Ressource. Danke für die schnelle Hilfe! – Alex

+15

Diese Option erkennt nur, ob der ** Browser ** Berührungsereignisse unterstützt, und bestimmt nicht, ob das ** Gerät ** diese unterstützt. Versuchen Sie dies in Chrome auf einem Nicht-Touch-Gerät. – RobG

3

könnten Sie überprüfen, ob typeof document.body.ontouchstart == "undefined" normal dom Ereignisse fallen zurück

1

ich eine volle demostration gemacht, die mit dem vollständigen Quellcode der Lösung dieses Problems in jedem Browser funktioniert: Detect touch screen devices in Javascript.

+0

Ich dachte, dass ein ziemlich anständiges Beispiel. danke für das Teilen. – zipzit

+0

Ihr Beispiel erzeugt viele Fehlalarme. Es gibt viele Browser, die die Touch-API standardmäßig implementieren, unabhängig davon, ob ein Touch-Gerät tatsächlich an das System angeschlossen ist oder nicht. – Nilpo

+0

@Nilpo Vielleicht hast du recht. Dieser Beitrag wurde vor mehr als sieben Jahren geschrieben. –

11

Verwenden Sie diesen Code, um zu erkennen, ob das Gerät Berührung unterstützt.

auch arbeiten für Windows 8 IE10 die Veranstaltung ‚MSPointerDown‘ verwendet anstelle von ‚Berührungsbewegungs‘

var supportsTouch = false; 
if ('ontouchstart' in window) { 
    //iOS & android 
    supportsTouch = true; 

} else if(window.navigator.msPointerEnabled) { 

    // Windows 
    // To test for touch capable hardware 
    if(navigator.msMaxTouchPoints) { 
     supportsTouch = true; 
    } 

} 
+3

Warum vereinfacht man es nicht als Einzeiler? '' var supportsTouch = ('ontouchstart' im Fenster || window.navigator.msPointerEnabled) '' –

+0

Leider funktioniert das nicht für zB 11 unter Windows 10 auf HP-Laptop (ohne Touchscreen) für mich. Es sagt fälschlicherweise supportsTouch = true. aber wenn ich etwas an "touchstart" anbinde, wird es nie ausgeführt. Irgendwie in der Nähe? –

+0

Das ist einfach falsch.Die Pointer-API gilt für mehr als nur Touch-Geräte. Es gilt für nahezu jedes Eingabegerät. – Nilpo

Verwandte Themen