2011-09-20 13 views
7

Tengo lo siguiente en la parte superior de mi js (que es necesario para que el complemento iScroll funcione).Rehabilitación de touchmove eventlistener. Aplicación para iPhone con Phone gap

document.addEventListener('touchmove', function (e) {e.preventDefault();}, false); 

En algunas páginas, tengo que volver a habilitar este desplazamiento iPhone tan normal se hace cargo (y para corregir errores en el teclado iphone no emergente en un cuadro de entrada cuando iscroll se utiliza en la página).

No puedo entrenar la sintaxis. ¿Alguien sabe cómo?

+0

Evitar que touchmove deje de hacer nada detenía todo el desplazamiento en mi aplicación Phonegap en Android. Cuando eliminé esa línea, para probarla, todo funcionó bien ... incluidos los elementos de iScroll. Entonces me pregunto si necesito esa línea en absoluto? –

Respuesta

12

Usted tendrá que definir una función que maneja el comportamiento preventDefault, así:

document.addEventListener('touchmove', preventDefault, false); 
function preventDefault(e) { e.preventDefault(); }; 

De esa manera adelante en su código, puede quitar el detector de eventos y volver a activar por defecto desplazamiento:

document.removeEventListener('touchmove', preventDefault, false); 

Ahora puede volver a agregar y eliminar cada vez que lo necesite.

No se puede lograr esto mediante una línea, función anónima como en su puesto original, porque la única forma en que puede hacer referencia a una función anónima es dejar primero que el fuego y luego eliminar la referencia a la misma, por ejemplo:

document.addEventListener('touchmove', function(e) { 
    e.preventDefault(); 

    // some more logic... 

    this.removeEventListener('touchmove', arguments.callee, false); 
}, false); 

Obviamente, este no es el efecto que le gustaría tener. También podría crear un objeto y almacenar una referencia a un método que maneje el evento. Si buscas bucear un poco más profundo, encontré este hilo útil: How to removeEventListener on anonymous function?

+0

¡Esto funcionó como un sueño! Muchas gracias, muchas :) – Billie

+0

¡Gracias, exactamente lo que necesitaba también! – hidace

0

después de addEventLister en mi iphone, no puedo eliminarlos más. pero esto funciona para mí.

var prevent = preventDefault(e) { e.preventDefault(); }; 
//To disable drag 
element.ontouchmove = prevent; 

... 

//To enable it agian 
element.ontouchmove = null; 
Cuestiones relacionadas