2011-03-17 14 views
7

Web sitesinde bir mesaj kutusu görüntülüyorsunuz. Ya tıklandığında ya da X saniye sonra fadeout yapabilmeyi isterim. Sorun, delay() işlevinin click() işlevini yerine getirmesidir, böylece tıklatırsanız bile, hala beklemeniz gerekir.jQuery Fadeout Tıklamada veya sonrasında gecikme

Burada da basit bir jsfiddle kurmak jQuery

$(document).ready(function() {  
$(".close-green").click(function() { 
     $("#message-green").fadeOut("slow"); 
    }); 

    //fade out in 5 seconds if not closed 
    $("#message-green").delay(5000).fadeOut("slow"); 

}) 

olduğunu. Gecikme çizgisi üzerinden sorun yorumunu görmek için http://jsfiddle.net/BandonRandon/VRYBk/1/

+0

olası yinelenen [gecikme JQuery etkileri] (http://stackoverflow.com/questions/251204/delay-jquery-effects) aynı şey bile yakın değil – swilliams

+0

@swilliams . Bu kişi bir animasyonu ertelemek için NASIL'ı öğrenmek istiyorsa, OP zaten biliyor ama gecikme bitmeden bir olay gerçekleşirse gecikmeyi nasıl önleyeceğini bilmek istiyor. –

cevap

22

Bir setTimeout olarak değiştirmek gerekir: http://jsfiddle.net/VRYBk/3/

(jsfiddle linkte) Ben senin gecikme hattı kaldırıldı ve benzeri standart setTimeout ile değiştirilir:

WHY'nin bir notu olarak, JS aşağıdan aşağıya okunur ve olayı tıklatıp tetiklemeden önce gecikmenizi okuyacaktır. Bu nedenle, tüm animasyonun duraklatılmasına neden olan gecikme çalıştırıldığında bile çalıştırılıyor.

+1

Bu sorunun neden olduğunu açıklamak için benim cevabımı güncelleştirildi –

+0

Teşekkürler, basit bir şey olduğunu düşündüm. NEDEN de açıkladığınızı gerçekten takdir ediyorum! :) – BandonRandon

6

Bu jQuery 1.5 yeni Deferred nesneler için ideal bir kullanım olacaktır: önemli değil o http://jsfiddle.net/Nyg4y/3/

Not at

// a deferred object for later processing 
var def = $.Deferred(); 

// resolve the deferred object on click or timeout 
$(".close-green").click(def.resolve); 
setTimeout(def.resolve, 5000); 

// however the deferred object is resolved, start the fade 
def.done(function() { 
    $(".message-green").fadeOut("slow"); 
}); 

Çalışma demo o hala düğmesine zamanlayıcı basarsanız yangınlar - def.resolve() numaralı çağrıya göz ardı edilir. Ben Oscar Godson önerdiği en iyi çözüm memba

+0

Teşekkürler, kütüphanenin biraz daha eski bir sürümünü kullanıyorum ama 1.5'e yükseltirsem artık bir şeylerim var. – BandonRandon

1

, ben bir şekilde kendisine bu ekledi:

Bir setTimeout ile değiştirmelisiniz:

if (! $clicked.hasClass("search")) 
{ 
    setTimeout(function() 
    { 
     jQuery("#result").delay('1500').fadeOut('2800'); 
    },7000); 
} 
}); 

Onun asıl öneri çok yararlıdır http://jsfiddle.net/VRYBk/3/

(jsfiddle bağlantısında) Gecikme hattınızı kaldırdım ve standart setTimeout ile değiştirdim:

Oscar Godson By

setTimeout(function(){ 
     $("#message-green").fadeOut("slow"); 
},5000) 
ait

İlgili konular