当前位置:  开发笔记 > 编程语言 > 正文

超时jQuery效果

如何解决《超时jQuery效果》经验,为你挑选了6个好方法。

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

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

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



1> Kent Fredric..:

更新:从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});

您可以使用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'); 


因为如果你使用队列,它很容易添加新事件并重用代码,而代码重用是一个GoodThing™
请注意,正如jQuery API文档中所述,delay()实际上应仅用于与效果队列相关的事情.如果你需要一个超时的东西,setTimeout()仍然是要走的路.

2> Coughlin..:

我刚刚在下面弄清楚了:

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

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



3> Arash Milani..:

@strager很棒的黑客.像这样将它实现为jQuery:

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

然后将其用作:

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



4> strager..:

你可以这样做:

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

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



5> jason..:

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

在这里查看:jQuery doTimeout:像setTimeout一样,但更好.



6> user128026..:

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

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有