Parece que no puedo capturar el evento de desplazamiento en un iPad. Ninguno de estos funciona, ¿qué estoy haciendo mal?
window.onscroll=myFunction;
document.onscroll=myFunction;
window.attachEvent("scroll",myFunction,false);
document.attachEvent("scroll",myFunction,false);
Todos funcionan incluso en Safari 3 en Windows. Irónicamente, TODOS los navegadores de la PC son compatibles window.onload=
si no le importa eliminar los eventos existentes. Pero no vayas al iPad.
window.pageYOffset
y nodocument.body.scrollTop||document.documentElement.scrollTop
como cualquier otro navegador / hardware existente.window.pageYOffset
no se actualiza en la fase de desaceleración, sino solo cuando termina el desplazamiento.Para iOS, debe usar el evento touchmove , así como el evento de desplazamiento como este:
fuente
Perdón por agregar otra respuesta a una publicación anterior, pero generalmente obtengo un evento de desplazamiento muy bien al usar este código (funciona al menos en 6.1)
Y eso funciona para mí. Lo único que no hace es dar un evento de desplazamiento para la desaceleración del desplazamiento (una vez que se completa la desaceleración, obtiene un evento de desplazamiento final, haga lo que quiera con él), pero si deshabilita la inercia con css haciendo esto
No tienes inercia en tus elementos, para el cuerpo, aunque es posible que tengas que hacer el clásico
fuente
gesturechange
events no es estándar y solo es compatible con Safari: developer.mozilla.org/en-US/docs/Web/Events/gesturechangePude obtener una gran solución a este problema con iScroll, con la sensación de desplazamiento por impulso y todo https://github.com/cubiq/iscroll El documento de github es genial, y lo seguí principalmente. Aquí están los detalles de mi implementación.
HTML: Envolví el área desplazable de mi contenido en algunos divs que iScroll puede usar:
CSS: utilicé la clase Modernizr para "toque" para orientar mis cambios de estilo solo a dispositivos táctiles (porque solo he instanciado iScroll al tocar).
JS: Incluí iscroll-probe.js de la descarga de iScroll y luego inicialicé el scroller como se muestra a continuación, donde updatePosition es mi función que reacciona a la nueva posición de scroll.
Debe usar myScroller para obtener la posición actual ahora, en lugar de mirar el desplazamiento de desplazamiento. Aquí hay una función tomada de http://markdalgleish.com/presentations/embracingtouch/ (un artículo muy útil, pero un poco desactualizado ahora)
El único otro problema era que ocasionalmente perdía parte de mi página a la que estaba tratando de desplazarme, y se negaba a desplazarse. Tuve que agregar algunas llamadas a myScroller.refresh () cada vez que cambiaba el contenido del #wrapper, y eso resolvió el problema.
EDITAR: Otro problema fue que iScroll se come todos los eventos de "clic". Activé la opción para que iScroll emitiera un evento de "toque" y los manejé en lugar de eventos de "clic". Afortunadamente no necesité hacer mucho clic en el área de desplazamiento, así que esto no fue un gran problema.
fuente
Desde que salió iOS 8, este problema ya no existe. El evento de desplazamiento ahora también se activa sin problemas en iOS Safari.
Entonces, si registra el
scroll
controlador de eventos y verificawindow.pageYOffset
dentro de ese controlador de eventos, todo funcionará bien.fuente