2016-06-07 10 views
5

ich meinen Aufruf mehr request mit der gleichen Funktion in einer ZeitWas passiert, wenn ich mehrere Male request

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

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

Was passieren wird, nennen? Wird es dupliziert? Würde es 2 mal im selben Frame aufgerufen werden? Oder es würde gestapelt und auf Differenzrahmen aufgerufen werden?

Antwort

11

Von the MDN documentation:

Die Callback-Methode ein einziges Argument übergeben wird, ein DOMHighResTimeStamp, die die aktuelle Zeit anzeigt, wenn Rückrufe von request beginnen zu feuern die Warteschlange gestellt. Mehrere Rückrufe in einem einzelnen Frame erhalten daher den gleichen Zeitstempel, auch wenn die Zeit während der Berechnung der Auslastung aller vorherigen Callbacks verstrichen ist. Dieser Zeitstempel ist eine Dezimalzahl in Millisekunden, jedoch mit einer minimalen Genauigkeit von 1 ms (1000 μs).

(Hervorhebung von mir)

Auch from the spec:

Wenn die request() -Methode aufgerufen wird, muss der User-Agent die folgenden Schritte ausführen:

...

  1. Hängen Sie das Argument der Methode an die Dokumentliste des Animationsrahmens cal an lbacks

und

Wenn der User-Agent ist die Animationsrahmen Rückrufe für ein Dokument doc mit einem Zeitstempel jetzt ausführen können, müssen sie die folgenden Schritte ausführen:

...

  1. Für jeden Eintrag in Rückrufe in der Reihenfolge: aufrufen der Rückruf

Also für Ihre Frage:

Was wird passieren? Wird es dupliziert? Würde es 2 mal im selben Frame aufgerufen werden? Oder es würde gestapelt und auf Differenzrahmen aufgerufen werden?

Das vor allem zusammen genommen zeigt, dass aufeinanderfolgende Anrufe auf eine Liste von Callbacks hinzugefügt werden, die alle eines nach dem anderen in der Reihenfolge ausgeführt werden, sie hinzugefügt wurden, wenn der Browser, um sie auszuführen ist darauf zurückzuführen, im Wesentlichen dupliziert der Anruf an Draw in Ihrem Code.

+0

Vielen Dank – Thaina