2008-10-30 127 views
47

我想在延迟几秒钟后淡出一个元素及其所有子元素。但我还没有找到一种方法来指定效果应该在指定的时间延迟后开始。延迟JQuery效果

+1

你能举一个例子,说明一个元素的子元素何时不与元素一起褪色? – tvanfosson 2008-10-30 18:31:28

+1

对不起,我的错误,我会更新帖子 – 2008-10-30 18:38:00

回答

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

5000是五秒钟,以毫秒为单位。

+3

请注意,这是使用Javascript的内置setTimeout函数,没有什么特定的jQuery。 – 2008-10-30 18:24:27

+0

这只能部分回答他的问题,我想。 – 2008-10-30 18:26:41

+0

如果孩子们在#foo元素中,他们也应该褪色... – swilliams 2008-10-30 18:29:43

1

您可以通过使用fadeTo()方法避免使用setTimeout,并设置5秒延迟。

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

我用这个插件暂停我刚写

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

这样称呼它:

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

注意:你并不需要一个回调。


编辑:您现在应该使用jQuery 1.4. built in delay()方法。我没有检查,但我认为它比我的插件更“聪明”。

1

我写了一个插件,可以让你在链中添加延迟。例如$('#div')。fadeOut()。delay(5000).fadeIn(); //淡出元素,等待5秒,淡入淡出元素。

它不使用任何动画hack或过多的回调链接,只是简单的干净的短代码。

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

19

以前,你会做这样的事情

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

第一动画没有做任何事情,因为你已经有了透明度1的元素,但它会暂停的时间量。

在jQuery 1.4中,他们已经将此构建到框架中,因此您不必像上面那样使用hack。

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

的功能是一样的原始jQuery.delay()插件http://www.evanbot.com/article/jquery-delay-plugin/4

11

最好的办法是通过使用jQuery延时方法:

$( '#添加my_id')延迟(2000年)。淡出(2000);