ontouchstart ontouchmove event div javascript jquery touch mobile-safari touch-events

javascript - ontouchmove - propiedades del evento touchend



ontouchstart jquery (2)

Si capturo todos los eventos de touchend desde dispositivos móviles con:

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

Necesito obtener el touch.screenX, touch.screenY, touch.clientX y touch.clientX desde el parámetro e. Todos los ejemplos que he visto sugieren que e.touches será una colección, y puede obtener los detalles táctiles con e.touches[0] . En mis pruebas en un ipad, e.touches siempre está indefinido. No estoy usando ningún plugin de jquery.

También probé e.targetTouches, que también está indefinido.

¿Alguien puede ayudar?


En realidad, los toques liberados se encontrarán en la matriz changedTouches, es decir:

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

Creo que esto es un poco más confiable que pasar por la propiedad originalEvent.

Puede leer más sobre changedTouches aquí: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent


La propiedad touches es un objeto TouchList. Puede ver la referencia de la clase TouchList here .

Si monitorea su propiedad de longitud con este código de ejemplo en #log div:

$(''#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/>''); });

obtendrá 1 mientras ejecuta touchstart y touchmove, y 0 cuando ejecuta touchend. Es por eso que e.touches[0] indefinido de e.touches[0] .