Zaman aşımı jQuery efektleri


101

Bir öğenin solmasını sağlamaya çalışıyorum, sonra 5000 ms'de tekrar kayboluyor. Şunun gibi bir şey yapabileceğimi biliyorum:

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

Ancak bu yalnızca solmayı kontrol edecek, geri aramaya yukarıdakileri ekler miyim?

Yanıtlar:


197

Güncelleme: jQuery 1.4'ten itibaren .delay( n )yöntemi kullanabilirsiniz . http://api.jquery.com/delay/

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

Not : $.show()ve $.hide()varsayılan olarak sıraya alınmaz, bu nedenle $.delay()onlarla birlikte kullanmak istiyorsanız , bunları şu şekilde yapılandırmanız gerekir:

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

Kuyruk sözdizimini kullanabilirsiniz, bu işe yarayabilir:

jQuery(function($){ 

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

}); 

veya gerçekten ustaca davranabilir ve bunu yapmak için bir jQuery işlevi yapabilirsiniz.

(function($){ 

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

bu (teoride, burada hafıza üzerinde çalışmak) bunu yapmanıza izin verir:

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

1
Basit bir setTimeout kullanımı da işe yarayacakken, kuyruğu neden kullandığınızı merak ediyorum.
SolutionYogi

33
çünkü kuyruğu kullanırsanız, koda yeni etkinlikler eklemek ve yeniden kullanmak kolaydır ve kodun yeniden kullanımı bir GoodThing ™
Kent Fredric

2
JQuery API belgelerinde de belirtildiği gibi delay () gerçekten yalnızca efekt kuyruğuyla ilgili şeyler için kullanılmalıdır. Başka bir şey için zaman aşımına ihtiyacınız varsa, setTimeout () yine de gidilecek yoldur.
scy

Vay be, @bottlenecked bağlantısı için teşekkürler, sanırım benim örneğimin jQuery'ye eklenen yeni özelliğe bu kadar benzemesinin nedeni, bu yanıttan bugs.jquery.com/ticket/4102 = P
Kent Fredric

23

Ben sadece aşağıda anladım:

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

Gönderiyi diğer kullanıcılar için saklayacağım!


14

@Strager tarafından büyük hack. Bunu jQuery'ye şu şekilde uygulayın:

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

Ve sonra şu şekilde kullanın:

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

11

Bunun gibi bir şey yapabilirsiniz:

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

Maalesef .animate ({}, 2000) yapamazsınız - Bunun bir hata olduğunu düşünüyorum ve bunu bildireceğim.



5

Onu bu şekilde kullanabilmek için geri dönmen gerekiyor this. Dönüş olmadan, fadeOut ('yavaş'), o işlemi gerçekleştirecek bir nesne almayacaktır.

Yani:

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

O zaman şunu yapın:

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

1

Bu, yalnızca birkaç jQuery satırı ile yapılabilir:

$(function(){
    // make sure img is hidden - fade in
    $('img').hide().fadeIn(2000);

    // after 5 second timeout - fade out
    setTimeout(function(){$('img').fadeOut(2000);}, 5000);
});​

çalışan bir örnek için aşağıdaki kemere bakın ...

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.