2016-06-07 116 views
5

我的意思是在一個時間什麼,當我打電話requestAnimationFrame多次

function Draw() { /* DoSomething */ } 
function AFunc() { 
    /* prepare something */ 
    requestAnimationFrame(Draw); 
} 
function BFunc() { 
    /* prepare something */ 
    requestAnimationFrame(Draw); 
} 

window.onload(function(){ 
    AFunc(); 
    BFunc(); 
}); 

會發生什麼叫多requestAnimationFrame具有相同功能的發生呢?它會重複嗎?它會在同一幀中被調用兩次嗎?或者它會被堆疊並被稱爲差異框架?

回答

11

the MDN documentation

回調方法傳遞一個參數,一個DOMHighResTimeStamp,其指示當前時間通過時排隊requestAnimationFrame回調開始射擊。 因此,即使在計算每個先前回調的工作負載期間已經過去了時間,但單個幀中的多個回調都會收到相同的時間戳。此時間戳是一個十進制數,以毫秒爲單位,但最小精度爲1毫秒(1000微秒)。

(重點煤礦)

此外,from the spec

當requestAnimationFrame()方法被調用,用戶代理必須執行下列步驟:

...

  1. 將方法的參數附加到文檔的動畫幀列表cal lbacks

當用戶代理是一種用於與時間戳的文檔的文檔現在運行的動畫幀的回調,它必須執行下列步驟:

...

  • 對於回調每個條目,以便:調用回調
  • 因此,對於你的問題:

    會發生什麼?它會重複嗎?它會在同一幀中被調用兩次嗎?或者它會被堆疊並被稱爲差異框架?

    以上所有加在一起表明,連續通話將被添加到回調列表,將所有其他的順序,他們在瀏覽器是由於運行它們,基本上是重複添加後執行一個在代碼中調用Draw

    +0

    非常感謝 – Thaina

    相關問題