Eine Div-Animation nach der anderen mit einem verzögerten Objekt

8

Animiere die Div, nachdem die vorherige Div-Animation mit deferred object abgeschlossen wurde. Diese einfache Methode funktioniert mit den beiden Funktionen f1 und f2 , aber wenn ich f3 einführe, schlägt es fehl.

Gibt es eine bessere Möglichkeit, dies mit dem verzögerten Objekt zu erreichen?

JSFiddle: Ссылка

%Vor% %Vor% %Vor%
    
jcoulston2 31.01.2016, 12:26
quelle

3 Antworten

1

Sie werden es einfacher finden:

  • Machen Sie animationAgent() zu einer einfachen Funktion, die das Versprechen zurückgibt, die nur über das animierte Element informiert, und nichts über die Reihenfolge, in der es verwendet werden soll (dh% prevElement auslassen),
  • arrangiere die Funktionen f1() , f2() und f3() , um die von animationAgent() .
  • zurückgegebene Zusage zurückzugeben

Dann haben Sie die Grundlage für den Aufbau einer zuverlässigen Animationssequenz.

%Vor%

DEMO

Alternativ konstruieren Sie die .then-Kette mechanistisch aus einem Array von Funktionsreferenzen:

%Vor%

DEMO

Da die drei Animationen identisch sind, können Sie die Notwendigkeit für einzelne Funktionen vermeiden, indem Sie die .then-Kette aus einem Array von Elementselektoren erstellen und animationAgent() direkt aufrufen:

%Vor%

DEMO

    
Roamer-1888 01.02.2016, 00:33
quelle
0

Haben Sie jemals darüber nachgedacht, Callbacks in der Animationsfunktion zu verwenden?

Hier ist ein Beispiel mit fadeOut: Ссылка

%Vor%     
seahorsepip 31.01.2016 15:12
quelle
0

nicht sicher, aber ich denke, das ist was du willst.

Arbeitsbeispiel Geige

Ich denke, Sie hoffen, dass deferred.done() f1, f2, f3 nacheinander ausführt, und das tut es auch. Es wartet jedoch nicht darauf, dass die in diesen Funktionen aufgerufenen Animationen beendet werden, bevor die nächste Funktion aufgerufen wird.

Versuchen Sie, die Funktionsaufrufe an der Konsole mit console.log() zu protokollieren, und Sie werden es wissen.

Hier ist der aktualisierte JavaScript-Code -

%Vor%     
Rajesh Jangid 02.02.2016 13:18
quelle