2011-04-21 7 views
7

Advertencia preliminar: Soy muy nuevo en js y lo he conseguido principalmente haciendo búsquedas en la web de ejemplos/tutoriales.javascript equivalent of 'mouseleave' para interacciones táctiles

Estoy escribiendo js, ​​que debe ejecutarse tanto en la web como en dispositivos móviles (por ejemplo, iPad).

tenemos una biblioteca para ayudar a abstraer las diferencias entre mouse y touch:

if (navigator.userAgent.search('Mobile') > 0) { 
    window.FLAGS = { 
    start: 'touchstart', 
    end: 'touchend', 
    move: 'touchmove', 
    click: 'click', 
    touchScreen: true 
    }; 
} else { 
    window.FLAGS = { 
    start: 'mousedown', 
    end: 'mouseup', 
    move: 'mousemove', 
    click: 'click', 
    touchScreen: false 
    }; 
} 

Luego, en código que puede hacer cosas como:

widget.view.bind(FLAGS.start, function(e) { 

que estoy tratando de encontrar una touch equivalente para mouseleave entonces puedo hacer un truco similar.

me puedo imaginar formas de atrapar un evento leave mediante el seguimiento de la posición en la que move y comparando a la caja de un widget en cuestión de delimitación, pero espero que hay un poco de una sola línea, como la relación touchstart/mousedown.

Respuesta

7

Se ha sugerido, pero no se aplica yo sepa: http://www.quirksmode.org/mobile/advisoryTouch.html

Algo como esto podría funcionar (escribiéndolo desde la parte superior de mi cabeza, no probado):

var element; 
document.addEventListener('touchstart', function(event) { 
    event.preventDefault(); 
    var touch = event.touches[0]; 
    element = document.elementFromPoint(touch.pageX,touch.pageY); 
}, false); 

document.addEventListener('touchmove', function(event) { 
    event.preventDefault(); 
    var touch = event.touches[0]; 
    if (element !== document.elementFromPoint(touch.pageX,touch.pageY)) { 
     touchleave(); 
    } 
}, false); 

function touchleave() { 
    console.log ("You're not touching the element anymore"); 
} 
+0

Gracias. Creo que lo de "no implementado" es lo que necesitaba escuchar, y aprecio doblemente el código de ejemplo para una solución alternativa. –

+1

su publicación es antigua pero, ¿no debería ser "changeTouches" para el evento touchmove? al menos en iPads, la matriz de toques no está definida en TouchMove - compare http://stackoverflow.com/a/7236327/818732 –