2011-10-28 9 views
7

Estoy usando iScroll.js para desplazarme por un carrusel de elementos en una página móvil. He encontrado la siguiente solución que detecta el movimiento vertical y se detiene el guión iScroll tomar el control, dejando que el desplazamiento vertical nativa suceda:iScroll - Preservar desplazamiento vertical nativo - funciona en iOS, no en Android

 onBeforeScrollStart: function(e) { 
     try { 
      point = e.touches[0]; 
      pointStartX = point.pageX; 
      pointStartY = point.pageY; 
     } catch(e) {} 
     null; 
    }, 
    onBeforeScrollMove: function(e) { 
     try { 
      deltaX = Math.abs(point.pageX - pointStartX); 
      deltaY = Math.abs(point.pageY - pointStartY); 
      if (deltaX >= deltaY) { 
       e.preventDefault(); 
      } else { 
       null; 
      } 
     } catch(e) {} 
    } 

estoy usando try {} catch {} ya que tenía algunos problemas cuando se prueba en un navegador (se quejó de que el punto no está definido).

El problema que tengo es que funciona bien en iOS, probado en varios dispositivos i, pero en Android no es tan bueno. Si un usuario intenta desplazarse verticalmente por la página, comenzando por colocar el dedo en el carrusel, la página no se desplaza, ya que iScroll todavía tiene control.

¿Alguna idea de cómo puedo hacer que funcione en Android, o cualquier sugerencia hacia dónde podría estar yendo mal?

Editar:

Algunos depuración y he descubierto posiblemente por qué esto no está funcionando. Las coordenadas se actualizan mientras el usuario toca la pantalla en iOS, pero en Android, solo se captura el primer conjunto de coordenadas. ¿Alguna idea de por qué esto sería?

+0

¿Ha intentado utilizar 'myScroll.disable()' y 'myScroll.enable()'? –

Respuesta

0

Parece que no tiene "puntos" en su alcance para onBeforeScrollMove. Además, algunos dispositivos Android pueden invocar eventos de clic sobre multitouch (no puedo confirmarlo, pero solo teorizan debido a la fragmentación de la plataforma)

Tengo un buen script que lanzaré pronto que toma eventos de clics y simula un evento multitáctil único que usa "mouse" como propiedad del identificador táctil, que podría ser de alguna ayuda con la depuración. Trataré de tener el proyecto en línea mañana por la noche.

Es debido a una serie de cambios y proyectos que se añadirán, pero aquí hay un enlace:

https://github.com/skhameneh

EDIT: Corrección, estás incluso actualizando "punto"? Parece tener un ámbito fuera de este fragmento de código y se cambia dentro. Podría ser útil si publicó el resto de su código.

0

El creador de iScroll en realidad tiene un puerto que parece funcionar exactamente como usted lo describe mediante paginación horizontal y aún permitiendo el desplazamiento vertical. https://github.com/cubiq/2-way-iScroll

Cuestiones relacionadas