2015-10-23 7 views
14

Meine Anwendung verwendet die Touch-API, um Berührungsereignisse in JavaScript zu erkennen. Beispiel:Touch-API (z. B. Touchstart) funktioniert nicht in MS Edge

$(".element").on("touchstart", function(event){ 
    alert("TRUE"); 
}); 

Dies funktioniert auf jedem Touch-Gerät mit jedem Browser wie Android oder iOS, aber es funktioniert nicht in MS Rande auf einem 10 Windows Tablet mit oder ohne conntected Tastatur. Die API scheint unterstützt zu werden: Compatibility list. Ich habe jedoch getestet: 'ontouchstart' in window und dies gibt false auf diesem Gerät zurück. Außerdem scheint mousedown gefeuert zu werden.

Was geht hier vor? Was kann ich tun, um Berührungsereignisse auf einem Windows 10-Tablet auszulösen? Ich möchte das Ereignis nur für Touch-Geräte behalten. Der Wechsel zur Pointer Events API würde auch Desktop-Geräte beinhalten und das ist nicht was ich will.

+0

hi, haben Sie es geschafft, das Problem zu beheben? –

+0

Nein, ich warte immer noch auf eine Lösung und habe keine Abhilfe gefunden. Wenn niemand eine Lösung antwortet, denke ich, dass die einzige Option ist, auch auf Mausereignisse zu warten. – dude

Antwort

12

Für Touch-API müssen Sie ein Flag am Edge aktivieren: Geben Sie in der Adressleiste about: flags ein und drücken Sie die Eingabetaste. Im Abschnitt Touch können Sie Touch-Ereignisse mit dem entsprechenden Dropdown-Menü aktivieren.

+0

Ich werde das im neuen Jahr überprüfen. – dude

+0

Tatsächlich wurde diese Eigenschaft deaktiviert. Ich weiß nicht, warum es deaktiviert wurde, aber nach dem Aktivieren werden Touch-Ereignisse korrekt ausgelöst. Vielleicht ein Windows 10 Upgrade-Problem ... – dude

+0

FYI - Ich musste dies tun und fügen Sie das style-Tag hinzu: '-ms-touch-action: keine;' erwähnte Ihre andere Antwort – thab

0

Versuchen Sie, das Ereignis pointerdown zu verwenden. Einige (viel) mehr information. Wie Sie sehen können, wird touchstart von Edge ausgelöst, aber nicht in allen Konfigurationen, wenn beispielsweise eine Tastatur angeschlossen/gepaart ist, keine touchstart.

+0

Ja, aber das '' 'touchstart''' Event wird überhaupt nicht ausgelöst, wenn ich keine Tastatur angeschlossen habe. Außerdem möchte ich dieses Ereignis nur für Touch-Geräte und nicht für Desktop-Geräte behalten (was bei Pointer API der Fall wäre). – dude

+0

Ist es eine Bluetooth-Tastatur? Ein Paar zu haben scheint genug zu sein, um das Ereignis nicht auszulösen, es ist ziemlich dumm. – Shanoor

+0

Ich habe ein ASUS Tablet, das mit einer Dockingstation geliefert wird. Die Dockingstation enthält eine Tastatur. Also wenn ich es von der Dockingstation abkopple erwarte ich das auf ein "natives" Touch-Tablet, das als solches erkannt werden sollte. – dude

-1

Wie ich weiß, sollte es keine Probleme mit Berührungsereignissen in der Kante geben.

Versuchen Sie, die systemeigene Methode addEventListener zu verwenden, um den 'touchstart' Event Listener hinzuzufügen. Vielleicht verursacht jQuery ein Problem.

+0

Ich werde das am Abend versuchen, aber weil '' ontouchstart 'im Fenster' 'false' zurückkehrt, fühle ich mich nicht glücklich darüber. – dude

+0

Ich versuchte es mit dieser Geige http://jsfiddle.net/4x67cfyz/2/. Es funktioniert jedoch nicht. – dude

3

Haben Sie die benutzerdefinierte Touch-Handhabung aktiviert? Sie können sie mit folgendem CSS-Schnipsel tun (auf dem Body-Tag oder nur einen Behälter für geastures):

-ms-touch-action: none; 

Als nächstes Touch-API ist eine Webkit-Funktion (? Vielleicht gibt es einen Fehler in CanIuse). IE und Edge verfügen über ein ähnliches Feature, das als Zeiger-API bezeichnet wird. Aber Sie können eine Polyfill-Bibliothek wie folgt verwenden:

+0

Sie ** deaktivieren ** Touch-Aktionen mit diesem CSS. Wie bereits erwähnt, werden Touch-Ereignisse unterstützt, siehe http://caniuse.com/#search=touch. Und ich möchte Mausereignisse nicht unterstützen und dies wäre die Tatsache mit Pointer API. Ich habe das auch beschrieben. – dude

+1

@julmot, es ist falsch. ms-touch-action to none ist erforderlich, um die Behandlung von benutzerdefinierten Gesten zu aktivieren. Ansonsten verwendet Ihr Browser ein Standardverhalten (für Scrolling-Handling, Panning, Pinch & Zoom).Wenn Sie eine benutzerdefinierte Geste erstellen (und Pointer-API verwenden möchten), müssen Sie ms-touch-action auf none setzen. Für die letzte Version von Edge muss "-ms-touch-action" durch "touch-action" ersetzt werden. Vertrauen Sie mir einfach und versuchen Sie das PointerMove-Ereignis auf dem Hauptteil einer Seite mit Touch-Aktion zu none und nothing zu verwenden. Du wirst sehen, was ich meine. –

+0

@julmot, für die Touch-API müssen Sie ein Flag am Edge aktivieren: Geben Sie in der URL-Eingabe Folgendes ein: flags. Im Bereich Berührung können Sie Touch-Ereignisse mit dem entsprechenden Dropdown-Menü aktivieren. –