Touchend-Ereigniseigenschaften

Lesezeit: 2 Minuten

Benutzer-Avatar
Matt Roberts

Wenn ich alle Touchend-Ereignisse von Mobilgeräten abfange mit:

$(document.body).bind('touchend', function (e) {
var touch = e.touches[0]; // doesnt work
...

Ich muss touch.screenX, touch.screenY, touch.clientX und touch.clientX aus dem e-Parameter abrufen. Alle Beispiele, die ich gesehen habe, deuten darauf hin, dass e.touches eine Sammlung sein wird, und Sie können mit auf die Berührungsdetails zugreifen e.touches[0]. In meinen Tests auf einem iPad, e.touches ist immer undefiniert. Ich verwende keine jquery-Plugins.

Habe auch e.targetTouches versucht, das ebenfalls undefiniert ist.

Kann jemand helfen?

Benutzer-Avatar
Gopherkhan

Tatsächlich werden freigegebene Berührungen im Array “changedTouches” gefunden, dh:

e.changedTouches[0].pageX // get the end x page coordinate for a released touch

Ich denke, das ist etwas zuverlässiger als das Durchlaufen der originalEvent-Eigenschaft.

Hier können Sie mehr über changeTouches lesen:
http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

  • Ich stimme zu, das ist die richtige Lösung. Ich selbst verwende dies, da es die richtigen Daten benötigt und warum mehr APIs als nötig verwechselt werden.

    – Koch Pharao

    7. Dezember 2012 um 22:42 Uhr

  • Dies ist bei Android nicht der Fall, wenn Sie jQuery verwenden. $(‘#test’).on(‘touchend’, function (evt) { console.log(evt.changedTouches); }); ist leer, das Gleiche gilt für $(‘#test’).bind(‘touchend’… aber wenn Sie jquery aus der Gleichung herausschneiden und getElementBy und addEventListener ausführen, funktioniert es.

    – WORMSS

    29. August 2014 um 0:12 Uhr

  • @WORMSS: Die Antwort ist in Bezug auf die jQuery-Eigenschaft event.originalEvent unklar. Dieses Problem wird hier speziell angesprochen – stackoverflow.com/questions/14999724/…

    – Nolo

    23. September 2014 um 16:17 Uhr

  • e.originalEvent.changedTouches[0].pageX ist die richtige Antwort! [EDITED 20-11-2017]

    – devpelux

    20. November 2017 um 17:41 Uhr


  • Damit endete mein wochenlanger Kampf. Vielen Dank

    – thednp

    3. Januar 2020 um 20:13 Uhr

Benutzer-Avatar
javibilbo

Die Eigenschaft touches ist ein TouchList-Objekt. Sie können die Klassenreferenz TouchList sehen hier.

Wenn Sie die Eigenschaft length mit diesem Beispielcode auf #log div überwachen:

$('#element').bind('touchstart', function(event) 
{
    $('#log').append(event.originalEvent.touches.length+'<br/>');
});

$('#element').bind('touchmove', function(event) 
{
    $('#log').append(event.originalEvent.touches.length+'<br/>');
});

$('#element').bind('touchend', function(event) 
{
    $('#log').append(event.originalEvent.touches.length+'<br/>');
});

Sie erhalten 1 beim Ausführen von touchstart und touchmove, eine 0 beim Ausführen von touchend. Deshalb erhalten Sie undefiniert von e.touches[0].

1277000cookie-checkTouchend-Ereigniseigenschaften

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy