我试图有一个元素淡入,然后在5000毫秒淡出再次出来。我知道我可以这样做:
setTimeout(function () { $(".notice").fadeOut(); }, 5000);
但这只会控制淡出,我会添加上述回调?
I just figured it out below:
$(".notice") .fadeIn( function() { setTimeout( function() { $(".notice").fadeOut("fast"); }, 2000); });
I will keep the post for other users!
You can do something like this:
$('.notice') .fadeIn() .animate({opacity: '+=0'}, 2000) // Does nothing for 2000ms .fadeOut('fast');
Sadly, you can't just do .animate({}, 2000) -- I think this is a bug, and will report it.
Update: As of jQuery 1.4 you can use the .delay( n ) method. http://api.jquery.com/delay/
.delay( n )
$('.notice').fadeIn().delay(2000).fadeOut('slow');
Note: $.show() and $.hide() by default are not queued, so if you want to use $.delay() with them, you need to configure them that way:
$.show()
$.hide()
$.delay()
$('.notice') .show({duration: 0, queue: true}) .delay(2000) .hide({duration: 0, queue: true});
You could possibly use the Queue syntax, this might work:
jQuery(function($){ var e = $('.notice'); e.fadeIn(); e.queue(function(){ setTimeout(function(){ e.dequeue(); }, 2000 ); }); e.fadeOut('fast'); });
or you could be really ingenious and make a jQuery function to do it.
(function($){ jQuery.fn.idle = function(time) { var o = $(this); o.queue(function() { setTimeout(function() { o.dequeue(); }, time); }); }; })(jQuery);
which would ( in theory , working on memory here ) permit you do to this:
$('.notice').fadeIn().idle(2000).fadeOut('slow');
To be able to use it like that, you need to return this. Without the return, fadeOut('slow'), will not get an object to perform that operation on.
this
I.e.:
$.fn.idle = function(time) { var o = $(this); o.queue(function() { setTimeout(function() { o.dequeue(); }, time); }); return this; //**** }
Then do this:
Ben Alman wrote a sweet plugin for jQuery called doTimeout. It has a lot of nice features!
Check it out here: jQuery doTimeout: Like setTimeout, but better.
Great hack by @strager. Implement it into jQuery like this:
jQuery.fn.wait = function (MiliSeconds) { $(this).animate({ opacity: '+=0' }, MiliSeconds); return this; }
And then use it as:
$('.notice').fadeIn().wait(2000).fadeOut('slow');
This can be done with only a few lines of jQuery:
$(function(){ // make sure img is hidden - fade in $('img').hide().fadeIn(2000); // after 5 second timeout - fade out setTimeout(function(){$('img').fadeOut(2000);}, 5000); });
see the fiddle below for a working example...