2009-01-20 25 views
15

Ich habe zwei divs und zwei separate Links, die slideDown und slideUp für die divs auslöst.Beenden Sie eine Animation und starten Sie dann die andere

Wenn einer der divs runtergleitet und ich auf den anderen klicke, verstecke ich das erste div (slidingUp) und öffne dann das andere div (slidingDown), aber im Moment ist es so als würde ein div runterrutschen, der andere, ebenfalls zur gleichen Zeit, rutscht auf.

Gibt es einen Weg, der jQuery sagen würde, zu warten, um zu beenden, hinunter von einem div zu gleiten und erst dann zu beginnen, den anderen zu rutschen?

+1

könnten nützlich sein, um zu sehen, was Sie bereits haben. –

Antwort

20
$('#Div1').slideDown('fast', function(){ 
    $('#Div2').slideUp('fast'); 
}); 

Edit: Habe ausgecheckt Sie das Akkordeon-Plugin (wenn das, was Sie versuchen zu tun)?

0

Die meisten jquery-Funktionen haben einen Callback-Parameter, in den Sie einfach eine Funktion einfügen können.

+0

Wie geht das? –

0
$("#thisDiv").slideUp("slow", function() { 
    // This function is called when the slideUp is done animating 
    $(this).doNextThing(); 
}); 
-1

Verwenden Sie den zweiten Parameter der Funktion: Callback. Zum Beispiel

 
$(this).slideDown(speed, function(){ 
    $(this).slideUp(); 
}); 
+0

das wird das gleiche div nach unten schieben dann wieder hoch, nicht wirklich was der Typ fragte, was? –

1

können Sie einen Rückruf verwenden, um einen nächsten Effekt ausgelöst, wenn die ersten getan wird:

$("#element1").slideUp(
    "slow", 
    function(){ 
     $("#element2").slideDown("slow"); 
    } 
); 

die Funktion als zweites Argument der slideUp Methode definierte In diesem Beispiel wird aufgerufen, nachdem die slideUp Animation beendet ist.

Lesen Sie die Dokumentation: http://docs.jquery.com/Effects/slideUp

5

Sie sollten es die Kette wie diese

function animationStep1() 
{ 
    $('#yourDiv1').slideUp('normal', animationStep2); 
} 

function animationStep2() 
{ 
    $('#yourDiv2').slideDown('normal', animationStep3); 
} 

// etc 

Natürlich können Sie diese nach oben mit rekursiven Funktionen aufpeppen kann, Arrays Animation Warteschlangen halten, usw., nach Ihren Bedürfnissen.

+3

Bitte, bitte, * bitte * setze 'animationStep2' anstatt' function() {animationStep2(); } '. Warum eine ganz neue Funktion erstellen, um einfach eine andere Funktion aufzurufen? – Aistina

+0

@Aistina: Punkt, ich habe diese Änderung gemacht, vielen Dank. –

0

ein Beispiel hierfür kann in JQuery for Beginners - Day 2

zu sehen gibt 15 Tage dieser Tutorials sind, und sie sind eine gute Ressource. Genießen!

4

Bit Ein sauberes Beispiel und mit einer Verzögerung zwischen der Animation:

$("#elem").fadeIn(1000).delay(2000).fadeOut(1000); 
Verwandte Themen