2012-10-02 11 views
6

Sembra che se si scorre lo window, lo window.setInterval non venga collegato/attivato mentre lo scorrimento è in corso o in seguito. Qualcun altro ha visto lo stesso problema?iOS 6 safari, setInterval non viene generato

voglio dire ...

  • Quale potrebbe essere causeing questo?
  • Cosa posso fare per risolvere questo problema?
+0

Forse interromperà tutti gli script durante lo scorrimento per risparmiare memoria e rendere l'animazione più veloce. Tiravo a indovinare. –

+0

@Derek, no, tutto il resto sembra funzionare bene, fino al punto della linea subito prima di setInterval. – Johnny

+0

Puoi fornire un link? – Geuis

risposta

8

iOS blocca quasi tutto in risposta al tocco dell'utente per garantire che sia reattivo. Il problema setInterval è noto e sembra che non ci sia una soluzione alternativa.

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

EDIT

Durante la "congelare" il timer non raggiungerà una volta che l'utente rilascia lo schermo. Gli eventi mancati non sono differiti, ma persi del tutto (un bug).

+0

non solo lo mette in pausa, non spara nemmeno dopo lo scorrimento. Il problema di interruzione è diverso, accade se il setInterval è collegato prima dello scorrimento della pagina. Nel mio caso, è allegato durante lo scorrimento della pagina. – Johnny

+0

Diritto. Durante il "blocco", il timer non si aggiornerà una volta che l'utente ha rilasciato lo schermo. Ma come viene collegato il tuo evento * durante * lo scroll se il motore JS è in pausa in quel momento? Sei sicuro che non si inneschi solo durante lo scroll e venga scartato? – jimp

+0

Ho lo stesso problema. Ricevo eventi di tocco se l'utente scorre, lascia andare e poi tocca di nuovo. Ma il mio setTimeout è scartato. La mia brutta soluzione hacky è fare una pulizia dopo ogni evento di scorrimento. (super brutto!) – Darwin

0

Non ne sono completamente sicuro, ma è possibile utilizzare uno setTimeout anziché setInterval? In generale, è una cattiva pratica usare setInterval comunque.

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

Non sono sicuro se concordo che l'uso di 'setInterval' è _generalmente_ una cattiva pratica (può essere comunque abusato, specialmente per il ridisegno in cui requestAnimationFrame è più adatto). Tuttavia, si può argomentare che 'arguments.callee' sia una cattiva pratica (motivo per cui è stato [rimosso dalla modalità rigorosa] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/ Functions_and_function_scope/Strict_mode? redirectlocale = it-IT & redirectslug = JavaScript/Strict_mode)). – Strille

+0

Grazie, ha aggiornato il codice. – Nathaniel

+1

Il problema persiste con setTimeout – TaylorMac

0

iOS6 Safari soffre di un bug che uccide i timer che vengono creati, mentre una pagina è scrolling.

C'è una correzione a questo problema fornito da kTmnh ricreando timer dopo lo scorrimento finiture

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

Problemi correlati