2016-06-07 16 views
5

mam na myśli nazywając wielokrotnego requestAnimationFrame z tej samej funkcji w jednym czasieCo się stanie, gdy zadzwonię requestAnimationFrame wielokrotnie

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

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

Co się stało? Czy się powieli? Czy byłby nazywany 2 razy w tej samej ramce? Czy byłby on ułożony i wywołany w ramce różnicowej?

Odpowiedz

11

Od the MDN documentation:

Metoda zwrotna przekazywana jest jeden argument, o DOMHighResTimeStamp, który wskazuje aktualny czas, kiedy callbacks kolejce przez requestAnimationFrame zacząć strzelać. Wiele wywołań zwrotnych w pojedynczej ramce, dlatego każdy z nich otrzymuje taki sam znacznik czasu, mimo upływu czasu podczas obliczania każdego obciążenia poprzedniego wywołania zwrotnego. Ten znacznik czasu jest liczbą dziesiętną w milisekundach, ale z minimalną dokładnością 1 ms (1000 μs).

(Kopalnia nacisk)

Również from the spec:

Gdy requestAnimationFrame() wywoływana jest metoda, czynnik użytkownik musi wykonać następujące czynności:

...

  1. Dołącz argument metody do listy dokumentów w calach animacji lbacks

i

Gdy agent użytkownika do uruchomienia wywołania zwrotne klatek animacji na doc dokumentu ze znacznikiem czasu teraz, należy wykonać następujące czynności:

...

  1. Dla każdego wpisu, w celu wywołania zwrotne: powołać się na zwrotnego

Tak na pytanie:

Co się stało? Czy się powieli? Czy byłby nazywany 2 razy w tej samej ramce? Czy byłby on ułożony i wywołany w ramce różnicowej?

Powyższy wszystko razem pokazuje, że kolejne połączenia będą dodawane do listy wywołań zwrotnych, co będzie być wykonywany jeden po drugim w kolejności, w jakiej zostały dodane, gdy przeglądarka jest ze względu na ich uruchomienia, zasadniczo powielając połączenie z Draw w kodzie.

+0

Dziękuję bardzo – Thaina

Powiązane problemy