2011-11-21 13 views
16

Me preguntaba si hay alguna manera de esperar hasta que fadeOut se complete antes de que comience el fadeIn, ya que cuando ejecuto el siguiente código, coloca un div debajo del otro, luego cuando se desvaneció se mueve hacia arriba ... se ve un poco feo.jQuery - Esperando que el fadeOut se complete antes de ejecutar fadeIn

Código es el siguiente:

$('.sidebarform').fadeOut('slow'); 
$('.sidebarsuccess').fadeIn('slow'); 

Respuesta

39

La función fadeOut tiene una devolución de llamada que se ejecuta cuando se realiza la animación:

$('.sidebarform').fadeOut('slow', function() { 
    $('.sidebarsuccess').fadeIn('slow'); 
}); 
+8

keep i Tenga en cuenta que si su selector es demasiado general, la función de finalización se disparará para cada elemento cuando esté totalmente desvanecido, por lo que si ya hay algunos ocultos, se disparará inmediatamente. – box86rowh

+2

He utilizado el selector: visible para combatir el problema descrito por @ box86rowh. Ver: http://api.jquery.com/visible-selector/ –

16

Otra opción es usar promesa que esperar a que todas las animaciones pendientes en .sidebarform para completar primero incluso si se iniciaron en otro lugar:

$('.sidebarform').fadeOut('slow').promise().done(function() { 
    $('.sidebarsuccess').fadeIn('slow'); 
}); 
+0

Aunque la otra respuesta tiene la marca verde, creo que esta respuesta resuelve mi problema más específicamente. – Lewis

Cuestiones relacionadas