关于requestAnimationFrame与setInterval的一点差异
requestAnimationFrame與setInterval都可以實現循環觸發事件,但是setInterval是基于時間的,而requestAnimationFrame是基于幀數的,在我的一次開發彈幕的項目中,在一開始使用了setInterval來切換彈幕的位置,起初并沒有什么問題,但是當瀏覽器切換回后臺后,就會出現彈幕積攢過多的原因,因為我隨不斷的創建新的彈幕進行移動(為了考慮性能,會優先使用已經被廢棄的彈幕盒),當瀏覽器切換到后臺后,瀏覽器本身已經不進行頁面渲染了,而我的定時器卻在不斷的創建新的彈幕以用來發射,當用戶將瀏覽器切換到前臺時候,會看到在一段時間內積攢的彈幕堆積到一起,最后發現是因為 瀏覽器在后臺的時候 定時器還是會不斷的跑的,但是在當前這種情況下 我可能并不是很希望彈幕系統繼續運行下去,我希望知道瀏覽器當前狀態是在前臺還是后臺,如果是后臺的話 則暫停彈幕,然而在微信中并沒有看到相關的機制,后來看到了requestAnimationFrame,requestAnimationFrame也是不斷的循環執行事件,但是他是按幀執行的,而且有一個好處是 當瀏覽器切換到后臺后,requestAnimationFrame是不會再去執行事件了。這和setInterval有著本質的差異。而requestAnimationFrame之所以在瀏覽器進入后臺不去執行的原因 ,應該是和瀏覽器進入后臺后不去渲染界面有關,因為渲染界面后需要逐幀繪制,當不進行頁面的選然后,也就沒必要去執行幀操作了,所以requestAnimationFrame也不會去執行了
?
如果上述推論是正確的,那可以基此判斷出setTimeout在瀏覽器進入后臺后依然會運行,就像setInterval一樣
轉載于:https://www.cnblogs.com/mrzhu/p/9300406.html
總結
以上是生活随笔為你收集整理的关于requestAnimationFrame与setInterval的一点差异的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSIS - 5.优先约束
- 下一篇: [名词解释] intuitive