views:

5803

answers:

3

So what I want to do is to coordinate some effects using jQuery for some AJAX calls that I'm working with. My problem is that the fadeIn for the second div fires at the same time with the fadeOut for the first div.

This could apply to other events as well so I'm curious, is there any way to make fadeId launch ONLY after fadeOut is done ?

jQuery("#div1").fadeOut("slow"); 
jQuery("#div2").fadeIn("slow");

Thanks

+6  A: 

You can do this by using a callback. Check out the jQuery docs.

jQuery("#div1").fadeOut("slow", function() { jQuery(this).fadeIn('slow'); });

Pretty much all of the jQuery effects take a callback to execute after the effect is over.

Paolo Bergantino
Thanks, that was it! :)
Brayn
In the question, the fadeIn was about a second div. Shouldn't your code have 'jQuery("#div2")' in the callback?
akauppi
Thanks! This helped me out. I was busy trying to figure out queue's when it was this simple!
DavidYell
+6  A: 

That's usually good enough for a quick animation but if you want to queue up a number of effects, you can also utilize the queue() and dequeue() methods like this:


$("#div1").fadeOut;
$("#div1").queue(function()
{
   $(this).fadeIn();
   $(this).dequeue();
}
$("#div").queue(function() 
{
   $(this).html("And now I'm sliding up. Wee!");
   $(this).slideUp("slow");
   $(this).dequeue()
}

Here, queue() adds a function to the object's queue (which doesn't have to be an animation) and dequeue() executes that function.

See the docs for more information.

mitjak
A: 

There were some typos in the above example which prevented it from working in Firefox, the corrected version:

$("#div1").fadeOut();
$("#div1").queue(function()
{
   $(this).fadeIn();
   $(this).dequeue();
});
$("#div").queue(function() 
{
   $(this).html("And now I'm sliding up. Wee!");
   $(this).slideUp("slow");
   $(this).dequeue();
});
zsiswick