2016-08-18 3 views
2

Ich habe einige Antworten auf diese Art von Problem gesucht und gesehen, kann mich aber immer noch nicht damit befassen. Ich habe eine Funktion mit 5 verschiedenen Animationen, die zu verschiedenen Zeiten enden. Ich möchte, dass diese Funktion die Animationen der inneren Funktionen vollständig beendet, bevor die nächste Funktion startet.Warten, bis alle Fades in einer Funktion beendet sind, bevor die nächste Funktion gestartet wird

HTML

<div id="div1"></div> 
<div id="div2"></div> 
<div id="div3"></div> 
<div id="div4"></div> 
<div id="div5"></div> 
<div id="div6"></div> 

CSS

#div1 { 
    background-color:red; 
    width:100px; 
    height:100px; 
} 
#div2 { 
    background-color:blue; 
    width:100px; 
    height:100px; 
} 
#div3 { 
    background-color:green; 
    width:100px; 
    height:100px; 
} 
#div4 { 
    background-color:yellow; 
    width:100px; 
    height:100px; 
} 
#div5 { 
    background-color:orange; 
    width:100px; 
    height:100px; 
} 
#div6 { 
    background-color:black; 
    width:100px; 
    height:100px; 
    display:none; 
} 

JQuery/JS

fadeAll(); // I want to wait for all of the fadeOuts in this function to complete before... 
$('#div6').fadeIn(); // .. this function starts. 

function fadeAll() { 
    $('#div1').fadeOut('slow'); 
    $('#div2').fadeOut('fast'); 
    $('#div3').fadeOut(); 
    $('#div4').fadeOut('fast'); 
    $('#div5').fadeOut(); 
} 

Antwort

1

einen Blick auf jQuery Dokumentation Nehmen Sie etwa fadeout. Dort werden Sie sehen, dass es eine complete Eigenschaft haben kann. Mal sehen, ob dieses Beispiel hilft Ihnen:

var fades = 0; 

function fadeOut(context, duration, callback) { 
    fades++; 
    context.fadeOut(duration, function() { 
     fades--; 
     if (typeof callback === "function") { 
      callback(); 
     } 
    }); 
} 

function fadeAll(callback) { 
    fadeOut($("#div1"), 'slow', callback); 
    fadeOut($("#div2"), 'fast', callback); 
    fadeOut($("#div3"), undefined, callback); 
    fadeOut($("#div4"), 'fast', callback); 
    fadeOut($("#div5"), undefined, callback); 
} 

function fadeCallback() { 
    if (fades === 0) { 
     $('#div6').fadeIn(); 
    } 
} 

fadeAll(fadeCallback); 

Hier haben wir einen Zähler zu wissen, wie viele fadeouts warten wir noch. Wir erhöhen diese Nummer, wenn ein fadeOut aufgerufen wird und verringern, wenn ein solches Ereignis abgeschlossen ist. Wir verringern es vor dem Aufruf des Callbacks und der Callback überprüft diesen Wert. Wenn es 0 ist, wird der Rückruf aufgerufen.

+0

Danke, ich denke, ich fange an, wie Callbacks endlich funktionieren. Aber ich verstehe diese Zeile 'callback && callback() nicht;' Was genau macht das? [Hier ist die Geige wieder] (https://jsfiddle.net/kevmon/g06v8e4o/1/) – Kevmon

+0

&& ist wahr, wenn und nur wenn beide Operanden truey sind. Der zweite Operand wird genau dann ausgewertet, wenn der erste wahr war. Wenn der Rückruf truey ist, wird callback() ausgewertet (aufgerufen). Wenn der Rückruf falsch ist, wird der zweite Operand nicht ausgewertet. Also, wenn Sie eine Callback-Funktion übergeben, dann wird es wahr, also angerufen. Wenn Sie keinen Callback übergeben, wird dieser nicht definiert und daher nicht aufgerufen. Als Ergebnis kann die Zeile übersetzt werden in "wenn es einen Rückruf gibt, führe es aus". Wenn meine Antwort Ihr Problem gelöst hat, dann markieren Sie es bitte als richtige Antwort. –

+0

Ah Gotcha. Also macht die Logik Sinn, es funktioniert einfach nicht. Ich bekomme einen Konsolenfehler, "Callback ist nicht definiert" – Kevmon

Verwandte Themen