超时 jQuery 效果

Posted

技术标签:

【中文标题】超时 jQuery 效果【英文标题】:Timeout jQuery effects 【发布时间】:2010-09-23 21:30:26 【问题描述】:

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

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

但这只会控制淡出,我可以在回调中添加上述内容吗?

【问题讨论】:

【参考方案1】:

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

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

注意$.show()$.hide()默认不排队,所以如果你想和他们一起使用$.delay(),你需要这样配置:

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

您可以使用队列语法,这可能有效:

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'); 

【讨论】:

我想知道你为什么要使用队列,而 setTimeout 的简单用法也可以工作。 因为如果你使用队列,很容易添加新事件和重用代码,代码重用是一件好事™ 请注意,正如 jQuery API 文档中所述,delay() 实际上应该只用于与效果队列相关的事情。如果您需要为其他事情设置超时, setTimeout() 仍然是要走的路。 哇,感谢@bottlenecked 的链接,我想我的示例与添加到 jQuery 的新功能如此相似的原因是这个答案对bugs.jquery.com/ticket/4102 = P【参考方案2】:

我刚刚想通了:

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

我会为其他用户保留帖子!

【讨论】:

【参考方案3】:

@strager 的绝妙技巧。像这样将它实现到 jQuery 中:

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

然后将其用作:

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

【讨论】:

【参考方案4】:

你可以这样做:

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

遗憾的是,您不能只执行 .animate(, 2000) - 我认为这是一个错误,并将报告它。

【讨论】:

【参考方案5】:

Ben Alman 为 jQuery 编写了一个不错的插件,名为 doTimeout。它有很多不错的功能!

在这里查看:jQuery doTimeout: Like setTimeout, but better

【讨论】:

【参考方案6】:

为了能够这样使用它,您需要返回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');

【讨论】:

【参考方案7】:

只需几行 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/

【讨论】:

以上是关于超时 jQuery 效果的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中添加带有超时的悬停效果

Java 设置session时间超时,一直没有效果,具体该怎么操作

在 Microsoft.Owin.Testing.TestServer 的 HttpClient 上更改超时没有效果

jQuery 效果方法

在jquery中,怎样实现刷新页面的效果?

jquery 怎么做简单抖动效果