2012-10-02 38 views
6

Parece que si estoy desplazando el window, el window.setInterval no se adjunta/dispara mientras el desplazamiento está sucediendo o después. ¿Alguien más ha visto el mismo problema?iOS 6 safari, setInterval no se dispara

quiero decir ...

  • Qué podría ser causeing esto?
  • ¿Qué puedo hacer para solucionar esto?
+0

Tal vez detendrá todas las secuencias de comandos al desplazarse para ahorrar memoria y hacer que la animación sea más rápida. Solo adivinando. –

+0

@Derek, no, todo lo demás parece funcionar bien, hasta el punto de la línea justo antes de setInterval. – Johnny

+0

¿Puede proporcionar un enlace? – Geuis

Respuesta

8

iOS detiene casi todo en respuesta al toque del usuario para garantizar que se sienta receptivo. El problema de setInterval es conocido y no parece haber una solución alternativa.

setInterval pauses in iphone/ipad (mobile Safari) during scrolling

EDITAR

Durante el "congelar" el temporizador no se pondrá al día una vez que el usuario libera la pantalla. Los eventos perdidos no son diferidos, sino que se pierden por completo (un error).

+0

no solo lo pausa, no se dispara incluso después del desplazamiento. El problema de pausa es diferente, sucede si el setInterval se adjunta antes de que la página se desplace. En mi caso, está adjunto durante el desplazamiento de página. – Johnny

+0

Derecha. Durante la "congelación", el temporizador no se pondrá al día una vez que el usuario suelte la pantalla. ¿Pero cómo se adjunta su evento * durante * el desplazamiento si el motor JS está en pausa durante ese tiempo? ¿Estás seguro de que no solo se dispara durante el desplazamiento y se descarta? – jimp

+0

Tengo el mismo problema. Estoy recibiendo eventos táctiles si el usuario se desplaza, suelta y toca nuevamente. Pero mi setTimeout se descarta. Mi fea solución hacky es hacer una limpieza después de cada evento de desplazamiento. (súper feo!) – Darwin

0

No estoy del todo seguro, pero podría usar un setTimeout en lugar de setInterval? En general, es una mala práctica usar setInterval de todos modos.

var delay = 100; 
(function callee() { 
    setTimeout(callee, delay); 
})(); 
+0

No estoy seguro de si acepto que usar 'setInterval' es _generalmente_ una mala práctica (sin embargo, definitivamente puede ser usado en exceso, especialmente para el redibujado donde requestAnimationFrame es más apropiado). Sin embargo, se puede argumentar que 'arguments.callee' es una mala práctica (razón por la cual se ha eliminado [del modo estricto]) (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/ Functions_and_function_scope/Strict_mode? Redirectlocale = en-US & redirectslug = JavaScript/Strict_mode)). – Strille

+0

Gracias, actualizó el código. – Nathaniel

+1

El problema persiste con setTimeout – TaylorMac

0

iOS6 Safari adolece de un error que mata temporizadores que se crean mientras que una página es desplazándose.

Hay una solución a este problema proporcionada por kTmnh recreando temporizadores después de acabados de desplazamiento

https://gist.github.com/3798925.

Cuestiones relacionadas