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?
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? –