2010-07-09 12 views
5

Al tratar de averiguar la posición de desplazamiento para un UIWebView, adjunto un oyente en el HTML que devolverá la llamada a la aplicación principal. Adjunto al oyente javascript como:onscroll evento no se desencadena en el iPad después de un solo toque panorámica?

window.onscroll = function reportScroll() { 
    var sY = window.pageYOffset; 
    alert('Scroll pos: '+sY); // Would evetually trigger a URL or something 
} 

Este evento sólo parece ser desencadenado en el final de un rollo de película en OS 3.2 (iPad), una vez que la desaceleración ha terminado. Sin embargo, esto: http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/handlingevents/handlingevents.html#//apple_ref/doc/uid/TP40006511-SW7 parece indicar que también debe activarse al final de una sola toma de dedos. Realmente necesito saber cuándo se completa esa sartén también. Cualquier ayuda muy apreciada, gracias.

+0

¿resolvió el problema? – galambalazs

+0

No, lo siento si mi comentario a continuación no estaba claro, no tenía esencialmente ningún efecto. –

Respuesta

3

Según QuirksMode Safari iPhone no se dispara onscroll evento en window, sino más bien en la document (y cualquier otro elemento). Apostaría que Safari iPad hace lo mismo.

+0

He intentado adjuntar la función a document.onscroll y parece tener el mismo resultado: desencadena el evento al final de la desaceleración del desplazamiento rápido, pero no ocurre ningún evento después del desplazamiento de un solo dedo. Gracias por la sugerencia, sin embargo. –

1

También experimenté el mismo problema en iPhone: la función flick scroll produce correctamente el evento onscroll, pero el desplazamiento con un solo dedo no (estaba usando esto en mi implementación de menú fijo, donde el menú está oculto después del evento ontouchstart y restaurado después de onscroll).

Resolví el problema utilizando dos eventos paralelos: onscroll y ontouchend. Ambos se refieren ahora al mismo controlador de eventos (que restaura el menú). Como los eventos se suprimen durante el desplazamiento, el evento ontouchend no se activa si la ventana continúa desplazándose. Ahora el manejo de eventos funciona tanto para scroll como para desplazamiento panorámico.

No he probado esto en iPad, me interesaría saber si esta revisión ayuda también en eso.

0

En iOS Safari, el evento onscroll debe dispararse solo una vez al final del desplazamiento (después de la desaceleración). Si simplemente quita el dedo de la pantalla, considérelo una desaceleración instantánea. Por lo tanto, si está realizando un 'scroll', el evento onscroll solo se activa una vez, al final de la desaceleración.

Parece que también debe controlar el evento touchend:

$(window).on('touchend', function() { 
    // Do something 
}); 

Nota: El evento touchend será despedido por cada dedo que se levantó de la pantalla.

Cuestiones relacionadas