requestAnimationFrame與setInterval區別

前者是按照幀數刷新  後者是按照事件刷新的

比較案例(彈幕事件)(此案例來自https://www.cnblogs.com/mrzhu/p/9300406.html

requestAnimationFrame與setInterval都可以實現循環觸發事件,但是setInterval是基於時間的,而requestAnimationFrame是基於幀數的,在我的一次開發彈幕的項目中,在一開始使用了setInterval來切換彈幕的位置,起初並沒有什麼問題,但是當瀏覽器切換回後臺後,就會出現彈幕積攢過多的原因,因爲我隨不斷的創建新的彈幕進行移動(爲了考慮性能,會優先使用已經被廢棄的彈幕盒),當瀏覽器切換到後臺後,瀏覽器本身已經不進行頁面渲染了,而我的定時器卻在不斷的創建新的彈幕以用來發射,當用戶將瀏覽器切換到前臺時候,會看到在一段時間內積攢的彈幕堆積到一起,最後發現是因爲 瀏覽器在後臺的時候 定時器還是會不斷的跑的,但是在當前這種情況下 我可能並不是很希望彈幕系統繼續運行下去,我希望知道瀏覽器當前狀態是在前臺還是後臺,如果是後臺的話 則暫停彈幕,然而在微信中並沒有看到相關的機制,後來看到了requestAnimationFrame,requestAnimationFrame也是不斷的循環執行事件,但是他是按幀執行的,而且有一個好處是 當瀏覽器切換到後臺後,requestAnimationFrame是不會再去執行事件了。這和setInterval有着本質的差異。而requestAnimationFrame之所以在瀏覽器進入後臺不去執行的原因 ,應該是和瀏覽器進入後臺後不去渲染界面有關,因爲渲染界面後需要逐幀繪製,當不進行頁面的選然後,也就沒必要去執行幀操作了,所以requestAnimationFrame也不會去執行了

關於其詳細的用法和兼容性

參考網址  https://developer.mozilla.org/zh-CN/docs/Web/API/Window/requestAnimationFrame

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章