超时jQuery效果

我试图让一个元素淡入,然后在5000毫秒内再次淡出。 我知道我可以做这样的事情:

setTimeout(function () { $(".notice").fadeOut(); }, 5000); 

但这只会控制淡出,我会在callback中添加上面的?

更新:从jQuery 1.4开始,您可以使用.delay( n )方法。 http://api.jquery.com/delay/

 $('.notice').fadeIn().delay(2000).fadeOut('slow'); 

注意$.show()$.show()在默认情况下是不排队的,所以如果你想使用$.delay() ,你需要这样configuration它们:

 $('.notice') .show({duration: 0, queue: true}) .delay(2000) .hide({duration: 0, queue: true}); 

你可能使用Queue语法,这可能会工作:

 jQuery(function($){ var e = $('.notice'); e.fadeIn(); e.queue(function(){ setTimeout(function(){ e.dequeue(); }, 2000 ); }); e.fadeOut('fast'); }); 

或者你可以真的很巧妙,做一个jQuery函数来做到这一点。

 (function($){ jQuery.fn.idle = function(time) { var o = $(this); o.queue(function() { setTimeout(function() { o.dequeue(); }, time); }); }; })(jQuery); 

这(理论上,在这里记忆工作)允许你这样做:

 $('.notice').fadeIn().idle(2000).fadeOut('slow'); 

我只是想明白下面:

 $(".notice") .fadeIn( function() { setTimeout( function() { $(".notice").fadeOut("fast"); }, 2000); }); 

我会保持其他用户的职位!

@strager大受好评。 像这样把它实现成jQuery:

 jQuery.fn.wait = function (MiliSeconds) { $(this).animate({ opacity: '+=0' }, MiliSeconds); return this; } 

然后用它作为:

 $('.notice').fadeIn().wait(2000).fadeOut('slow'); 

你可以做这样的事情:

 $('.notice') .fadeIn() .animate({opacity: '+=0'}, 2000) // Does nothing for 2000ms .fadeOut('fast'); 

可悲的是,你不能只做.animate({},2000) – 我认为这是一个错误,并将报告。

Ben Alman为jQuery写了一个名为doTimeout的甜蜜插件。 它有很多不错的function!

看看这里: jQuery doTimeout:像setTimeout,但更好

为了能够使用它,你需要返回this 。 如果没有返回,fadeOut('slow')将不会获得执行该操作的对象。

即:

  $.fn.idle = function(time) { var o = $(this); o.queue(function() { setTimeout(function() { o.dequeue(); }, time); }); return this; //**** } 

然后这样做:

 $('.notice').fadeIn().idle(2000).fadeOut('slow'); 

这可以通过几行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); });​ 

看下面的小提琴一个工作的例子…

http://jsfiddle.net/eNxuJ/78/