2009-01-20 663 views
15

Tengo dos divisiones y dos enlaces separados que desencadenan slideDown y slideUp para los divs.Finalice una animación y luego inicie la otra

Cuando uno de los divs se desliza hacia abajo y hago clic en el otro, oculto el primer div (deslizamiento hacia arriba) y luego abro el otro div (deslizamiento hacia abajo) pero, por el momento es como mientras un div se desliza hacia abajo, el otro, también en el mismo tiempo, se desliza hacia arriba.

¿Hay alguna manera de decirle a jQuery que espere para terminar deslizándose hacia abajo de un div y solo luego empezar a deslizar hacia el otro?

+1

podría ser útil para ver lo que ya tiene. –

Respuesta

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

Editar: ¿Ha revisado el plugin de acordeón (si eso es lo que estamos tratando de hacer)?

0

La mayoría de las funciones de jquery tienen un parámetro de devolución de llamada, puede simplemente pasarle una función a eso.

+0

¿Cómo hacer esto? –

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

Utilice el segundo parámetro de la función: devolución de llamada. Por ejemplo,

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

que deslizará el mismo div hacia abajo y luego hacia atrás, no realmente lo que el tipo preguntó, ¿eh? –

1

Se puede utilizar una devolución de llamada para disparar un efecto siguiente cuando el primero se hace:

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

En este ejemplo, la función definida como segundo argumento al método slideUp se llama después de la animación slideUp ha terminado.

Consulte la documentación: http://docs.jquery.com/Effects/slideUp

5

Usted debe encadenar como este

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

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

// etc 

Por supuesto se puede condimentar esto con las funciones recursivas, matrices que sostiene las colas de animación, etc., de acuerdo a sus necesidades.

+3

Por favor, por favor, * por favor * simplemente ponga 'animationStep2', en lugar de' function() {animationStep2(); } ' ¿Por qué hacer una función completamente nueva para llamar a otra función? – Aistina

+0

@Aistina: punto justo, hice ese cambio, muchas gracias. –

4

ejemplo un poco más limpio y con un retardo entre la animación:

$("#elem").fadeIn(1000).delay(2000).fadeOut(1000); 
Cuestiones relacionadas