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.