2010-04-05 39 views
25

Bir sayfadaki kullanıcı eylemlerine yanıt olarak ekranın üst kısmında bildirim iletisi görüntüleyen küçük bir jquery snippet'i var. Bildirim, genellikle içinde dinamik içerik bulunan Ajax eylemlerinden sonra görüntülenir. ÖrneğinJQuery TimeOut işlevi nasıl durdurulur/geçersiz kılınır?

:

bildirim kullanıcı TimeOut işlevi kendisini ve ikinci mesajı karıştırmayın bu durumda hızlı arkaya iki veya daha fazla işlemi yapar dışında, iyi çalışıyor

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast"); 
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000); 
içine geliyormuş gibi görünen önceki 3000 milisaniye.

Yeni bir eylem gerçekleştirilirse önceki bildirimi "öldürmek" için bir yol var mı? Hareketler/seçiciler, sadece TimeOut işlevi .... ile ya da onu durdurmak ya da bir şekilde geçersiz kılma ile hiçbir sorunum yok. Ya da mesajın kaybolmadan önce birkaç saniye boyunca ekranda durmasını sağlamak için daha iyi bir alternatif var mı?

Teşekkür ederiz.

cevap

56

, sen setTimeout fonksiyonu için dönüş değeri depolamak setTimeout numaralı telefonu arayın. Eğer yapabileceğiniz animasyon kuyruğunu temizlemek istediğinizde daha sonra daha sonra

$("#mini-txt").html("Thank you!"); 
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium"); 

Ve:

// Then clearn the timeout 
clearTimeout(timeout); 
+0

Takastan sonra zaman aşımı işlevini yerine getirecek mi? – sbs

6

Sen .stop()

Durdur şu anda çalışan animasyon eşleşti unsurları kullanabilirsiniz. Eğer zaman aşımı öldürmeye hazır olduğunuzda sadece Önceki depolanmış değerle clearTimeout diyoruz ... Sonra

// Set the timeout 
var timeout = setTimeout(function() 
    { 
     // Your function here 
    }, 2000); 

: Birinci

6

jQuery 1.4 bir böyle bir şey yapabileceği animasyonlar için gecikmeleri işlemek için yönteminde inşa etti

$("#mini").stop(true); 
0

Bu gecikme ile fonksiyon yayınlandıktan sonra zaman aşımı temizleyecektir 500ms

var timeout = setTimeout(function(){ 

/* YOUR FUNCTION */ 

}, 500, function(){ 
    clearTimeout(timeout); 
});