Efek jQuery batas waktu


101

Saya mencoba untuk memiliki elemen yang 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 callback?

Jawaban:


197

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

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

Catatan : $.show()dan $.hide()secara default tidak diantrekan, jadi jika Anda ingin menggunakannya $.delay(), Anda perlu mengkonfigurasinya seperti itu:

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

Anda mungkin dapat menggunakan sintaks Antrean, ini mungkin berfungsi:

jQuery(function($){ 

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

}); 

atau Anda bisa 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) mengizinkan Anda melakukan ini:

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

1
Saya bertanya-tanya mengapa Anda menggunakan antrian ketika penggunaan setTimeout yang sederhana juga akan berfungsi.
— SolutionYogi

33
karena jika Anda menggunakan antrian, mudah untuk menambahkan acara baru dan menggunakan kembali kode tersebut, dan penggunaan kembali kode adalah GoodThing ™
— Kent Fredric

2
Perhatikan bahwa, seperti yang juga dinyatakan dalam dokumentasi jQuery API, delay () seharusnya hanya digunakan untuk hal-hal yang berhubungan dengan antrian efek. Jika Anda memerlukan waktu tunggu untuk hal lain, setTimeout () masih merupakan cara yang tepat.
— scy

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 penting dari jawaban ini ke bugs.jquery.com/ticket/4102 = P
— Kent Fredric

23

Saya baru saja menemukannya di bawah ini:

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

Saya akan menyimpan postingan untuk pengguna lain!


14

Retasan hebat oleh @strager. Terapkan 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');

11

Anda bisa melakukan sesuatu seperti ini:

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

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



5

Untuk bisa menggunakannya seperti itu, Anda harus kembali this. Tanpa pengembalian, fadeOut ('slow'), tidak akan mendapatkan objek untuk menjalankan operasi itu.

Yaitu:

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

Lalu lakukan ini:

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

1

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 ini untuk contoh yang berfungsi ...

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.