2012-10-02 124 views
6

看起來如果我在滾動windowwindow.setInterval在滾動發生時或之後沒有被連接/觸發。 有沒有其他人看到同樣的問題?iOS 6 safari,setInterval沒有被觸發

我的意思是...

  • 什麼可以causeing呢?
  • 我能做些什麼來解決這個問題?
+0

也許它會停止所有腳本滾動時保存內存,並使動畫變得更快。只是猜測。 –

+0

@Derek,不,其他所有的東西似乎都很好,直到setInterval之前的那一行。 – Johnny

+0

你能提供一個鏈接嗎? – Geuis

回答

8

iOS停止響應用戶觸摸的幾乎所有內容以確保其感覺響應。 setInterval問題是已知的,似乎沒有解決方法。

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

編輯

在「凍結」,一旦用戶釋放屏幕計時器不會趕上。錯過的事件不會被延期,而是完全丟失(一個錯誤)。

+0

它不會暫停它,即使滾動後它也不會觸發。暫停問題不同,如果在頁面滾動之前附加了setInterval,則會發生這種情況。就我而言,它是在頁面滾動過程中附加的。 – Johnny

+0

沒錯。在「凍結」期間,一旦用戶釋放屏幕,計時器將無法趕上。但是,如果JS引擎在那段時間內暫停,那麼在滾動期間你的事件是如何被附加的?你確定它不只是在滾動期間觸發並被丟棄? – jimp

+0

我有同樣的問題。如果用戶滾動,我得到觸摸事件,放開,然後再次觸摸。但我的setTimeout被丟棄。我醜陋的hacky解決方案是在每個滾動事件之後進行清理。 (超級醜!) – Darwin

0

我不完全確定,但您可以使用setTimeout而不是setInterval?無論如何,使用setInterval通常是不好的做法。

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

我不確定我是否同意使用'setInterval'''通常是一個糟糕的做法(儘管它肯定會被濫用,特別是對於requestAnimationFrame更適合的地方重繪)。然而,可以爲'arguments.callee'做一個參數是一個不好的做法(這就是爲什麼它已經[從嚴格模式中移除](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/ Functions_and_function_scope/Strict_mode?redirectlocale = EN-US&redirectslug =的JavaScript/Strict_mode))。 – Strille

+0

謝謝,更新了代碼。 – Nathaniel

+1

問題仍然存在setTimeout – TaylorMac

0

iOS6的Safari瀏覽器從殺死而頁面是創建計時器錯誤遭受滾動。

有滾動完成

https://gist.github.com/3798925後的修復,以通過重新定時器由kTmnh提供了這個問題。

相關問題