Navegador Android: touchcancel está siendo disparado aunque touchmove tiene preventDefault
Estoy tratando de construir una página web que detecta el toque del usuario y arrastra y el objeto a lo largo del lienzo.
Así que estoy haciendo algo como esto:
- Android WebKit enfocado textarea no dibujar imagen de fondo
- Obtiene la última URL cargada de webview sin hacer un webView.goBack () en Android
- ¿Qué eventos de DOM están disponibles para WebKit en Android?
- ¿Cómo actualizar manualmente el navegador android con el último webkit (nocturno)?
- Cambiar el webkit predeterminado en Apache Cordova - Android
var touchStart = function(e) { e.preventDefault(); // Do stuff } var touchMove = function(e) { e.preventDefault(); console.log("Touch move"); // Move objs } var touchEnd = function(e) { e.preventDefault(); console.log("Touch start!"); // clean up stuff } var touchCancel = function(e) { e.preventDefault(); // Oh NO touch cancel! console.log("Touch cancel!"); } bindElemOrig.addEventListener('touchstart', touchStart, false); bindElemOrig.addEventListener('touchmove', touchStart, false); bindElemOrig.addEventListener('touchend', touchStart, false); bindElemOrig.addEventListener('touchcancel', touchStart, false);
Funciona bien hasta cierto punto.
El problema es que tan pronto como cargue demasiados objs, me parece que el touchmove tarda demasiado tiempo en responder, y touchcancel se dispara. El problema es que tan pronto como touchcancel se dispara no recibo más touchmove s eventos, y no puedo sentir el movimiento más.
¿Alguien se enfrentó a este problema? Sé sobre el error en Android, donde debe llamar a preventDefault ( touchend evento en ios webkit no disparar? ), Pero en este caso, parece que no está funcionando debido a la carga de memoria.
¡Gracias!
- ¿Habilitar el registro interno en el emulador de Android WebKit?
- ¿Cómo consigo que el navegador WVGA Android deje de escalar mis imágenes?
- Gotchas / errores en el desarrollo de WebKit en iOS o Android
- El navegador de Android se bloquea en las llamadas de Ajax, cuando se define la metaetiqueta de la ventana de visualización
- 3d css transform (translateZ) no funciona en android 4.0.3?
- ¿La aplicación se bloquea al reproducir video de tubo en la vista web?
- Desarrollo de sitios específicos para móviles. ¿Donde empezar?
- CSS: -webkit-touch-callout alternativas para android
Me gusta esto
var touchMove = function(e) { e.preventDefault(); setTimeout(function(){ console.log("Touch move"); // Move objs }) }
Use setTimeout para envolver su lógica en touchmove puede resolver este problema
Este problema puede deberse a un error (característica?) En Chrome / Android. Consulte este informe de errores .
Esta prueba demuestra el comportamiento ( JSFiddle ):
<!DOCTYPE html> <html> <head> <title></title> <script> var delay = 200; var haltEvent = function(event) { event.preventDefault(); event.stopPropagation(); }; var pause = function() { var startTime = new Date().getTime(); while (new Date().getTime() < startTime + delay); }; window.addEventListener('load', function() { var target = document.querySelector('#target'); var status = document.querySelector('#status'); target.addEventListener('touchstart', function(event) { haltEvent(event); status.innerHTML = '[touchstart]'; }, true); target.addEventListener('touchmove', function(event) { pause(); haltEvent(event); status.innerHTML = '[touchmove]'; }, true); target.addEventListener('touchend', function(event) { status.innerHTML = '[touchend]'; }, true); target.addEventListener('touchcancel', function(event) { status.innerHTML = '[touchcancel]'; }, true); }); </script> <style> #target { background-color: green; height: 300px; } #status { text-align: center; } </style> </head> <body> <div id="target"></div> <p id="status">[]</p> </body> </html>
No encuentro el evento touchcancel para ser disparado al azar. En su lugar, se dispara cuando se tarda ~ 200 ms para volver de un controlador de eventos touchmove.
- Cómo cerrar la barra de estado / el panel de notificaciones después de hacer clic en el botón de notificación
- Evento de recepción, si se ha descargado / añadido un archivo a la carpeta de descarga