タイムアウトjQuery効果


101

要素をフェードインしようとしていますが、5000ミリ秒後に再びフェードアウトします。私は次のようなことができることを知っています:

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

しかし、それはフェードアウトのみを制御します。コールバックに上記を追加しますか?

回答:


197

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

1
setTimeoutの単純な使用法でも機能するのに、なぜキューを使用しているのかと思います。
SolutionYogi

33
キューを使用すると、新しいイベントを簡単に追加してコードを再利用でき、コードの再利用はGoodThing™です
Kent Fredric

2
jQuery APIドキュメントにも記載されているように、delay()は実際にはエフェクトキューに関連するものにのみ使用する必要があることに注意してください。それ以外のタイムアウトが必要な場合でも、setTimeout()を使用してください。
SCY

うわー、リンクのおかげで@bottlenecked、私は私の例では、jQueryのに追加された新機能に非常に似ていることの理由を推測するに、この答えからの影響の顕著な連鎖があることであるbugs.jquery.com/ticket/4102 = Pは
ケントフレドリック

23

私はそれを以下で理解しました:

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

他のユーザーのために投稿を保存します!


14

@stragerによる素晴らしいハック。次のようにjQueryに実装します。

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

そしてそれを次のように使用します:

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

11

あなたはこのようなことをすることができます:

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

残念ながら、.animate({}、2000)だけではできません-これはバグだと思います。報告します。



5

そのように使用できるようにするには、戻る必要があります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');

1

これは、ほんの数行の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/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.