Dónal
Dónal

Reputation: 187529

delay JQuery effects

I want to fade out an element and all its child elements after a delay of a few seconds. but I haven't found a way to specify that an effect should start after a specified time delay.

Upvotes: 48

Views: 83731

Answers (6)

Simon_Weaver
Simon_Weaver

Reputation: 145930

I use this pause plugin I just wrote

$.fn.pause = function(duration) {
    $(this).animate({ dummy: 1 }, duration);
    return this;
};

Call it like this :

$("#mainImage").pause(5000).fadeOut();

Note: you don't need a callback.


Edit: You should now use the jQuery 1.4. built in delay() method. I haven't checked but I assume its more 'clever' than my plugin.

Upvotes: 43

Drew
Drew

Reputation: 4691

Previously you would do something like this

$('#foo').animate({opacity: 1},1000).fadeOut('slow');

The first animate isn't doing anything since you already have opacity 1 on the element, but it would pause for the amount of time.

In jQuery 1.4, they have built this into the framework so you don't have to use the hack like above.

$('#foo').delay(1000).fadeOut('slow');

The functionality is the same as the original jQuery.delay() plugin http://www.evanbot.com/article/jquery-delay-plugin/4

Upvotes: 19

user263865
user263865

Reputation:

The best way is by using the jQuery delay method:

$('#my_id').delay(2000).fadeOut(2000);

Upvotes: 11

chelfers
chelfers

Reputation:

I've written a plugin to let you add a delay into the chain.

for example $('#div').fadeOut().delay(5000).fadeIn(); // fade element out, wait 5 seconds, fade element back in.

It doesn't use any animation hacks or excessive callback chaining, just simple clean short code.

http://blindsignals.com/index.php/2009/07/jquery-delay/

Upvotes: 1

Sampson
Sampson

Reputation: 268344

You can avoid using setTimeout by using the fadeTo() method, and setting a 5 second delay on that.

$("#hideAfterFiveSeconds").click(function(){
  $(this).fadeTo(5000,1,function(){
    $(this).fadeOut("slow");
  });
});

Upvotes: 1

swilliams
swilliams

Reputation: 48910

setTimeout(function() { $('#foo').fadeOut(); }, 5000);

The 5000 is five seconds in milliseconds.

Upvotes: 77

Related Questions