Efek jQuery batas waktu

Saya mencoba membuat elemen memudar, lalu dalam 5000 ms memudar kembali. Saya tahu saya bisa melakukan sesuatu seperti:

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

Tapi itu hanya akan mengontrol fade out, apakah saya akan menambahkan yang di atas pada panggilan balik?


person Coughlin    schedule 25.11.2008    source sumber


Jawaban (7)


Pembaruan: Mulai jQuery 1.4 Anda dapat menggunakan metode .delay( n ). http://api.jquery.com/delay/

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

Catatan: $.show() dan $.hide() secara default tidak dimasukkan dalam antrean, jadi jika Anda ingin menggunakan $.delay() dengan keduanya, Anda perlu mengonfigurasinya seperti itu:

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

Anda mungkin bisa menggunakan sintaks Antrian, ini mungkin berhasil:

jQuery(function($){ 

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

}); 

atau Anda bisa menjadi sangat cerdik dan membuat fungsi jQuery untuk melakukannya.

(function($){ 

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

yang (secara teori, mengerjakan memori di sini) memungkinkan Anda melakukan hal ini:

$('.notice').fadeIn().idle(2000).fadeOut('slow'); 
person Kent Fredric    schedule 25.11.2008
comment
Saya bertanya-tanya mengapa Anda menggunakan antrian ketika penggunaan sederhana setTimeout juga akan berfungsi. - person SolutionYogi; 10.07.2009
comment
karena jika Anda menggunakan antrian, mudah untuk menambahkan acara baru dan menggunakan kembali kode, dan penggunaan kembali kode adalah GoodThing™ - person Kent Fredric; 11.07.2009
comment
Perhatikan bahwa, seperti yang juga dinyatakan dalam dokumentasi jQuery API, delay() seharusnya hanya digunakan untuk hal-hal yang berkaitan dengan antrian efek. Jika Anda memerlukan waktu tunggu untuk hal lain, setTimeout() masih merupakan cara yang tepat. - person scy; 16.08.2010
comment
Wow, terima kasih untuk tautannya @bottlenecked , saya rasa alasan contoh saya sangat mirip dengan fitur baru yang ditambahkan ke jQuery adalah karena ada rantai pengaruh yang penting dari jawaban ini ke bugs.jquery.com/ticket/4102 =P - person Kent Fredric; 01.11.2011

Saya baru saja mengetahuinya di bawah ini:

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

Saya akan menyimpan postingan tersebut untuk pengguna lain!

person Coughlin    schedule 25.11.2008

Retasan hebat dari @strager. Implementasikan ke jQuery seperti ini:

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

Dan kemudian gunakan sebagai:

$('.notice').fadeIn().wait(2000).fadeOut('slow');
person Arash Milani    schedule 03.12.2010

Anda dapat melakukan sesuatu seperti ini:

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

Sayangnya, Anda tidak bisa melakukan .animate({}, 2000) begitu saja -- Saya pikir ini adalah bug, dan akan melaporkannya.

person strager    schedule 25.11.2008

Ben Alman menulis plugin manis untuk jQuery bernama doTimeout. Ini memiliki banyak fitur bagus!

Lihat di sini: jQuery doTimeout: Seperti setTimeout, tapi lebih baik.

person jason    schedule 13.02.2010

Untuk dapat menggunakannya seperti itu, Anda harus mengembalikan this. Tanpa pengembalian, fadeOut('slow'), tidak akan mendapatkan objek untuk melakukan operasi tersebut.

I.e.:

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

Kemudian lakukan ini:

$('.notice').fadeIn().idle(2000).fadeOut('slow');
person user128026    schedule 10.07.2009

Ini dapat dilakukan hanya dengan beberapa baris 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);
});​

lihat biola di bawah untuk contoh kerja...

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

person DaveAlger    schedule 31.05.2012