2010-12-28 14 views
55
$('.transparent').removeClass('transparent').delay(2000).addClass('not_transparent').delay(4000) 

Ich habe eine div, die halb transparent ist und dann auf nicht transparent schalten möchten. Aber die jQuery .delay(); Methode scheint hier nicht zu funktionieren. Ich habe versucht. FadeIn(); stattdessen und das funktioniert mit einer Verzögerung, aber es funktioniert nicht die wechselnden Klassen.jQuery Verzögerung funktioniert nicht

Antwort

118

.delay() wird für Elemente verwendet, die Teil einer queue sind, wie Animationen. Eine einfache addClass wird nicht in die Warteschlange gestellt.

Sie könnten setTimeout verwenden.

var trans = $('.transparent').removeClass('transparent'); 
setTimeout(function() { 
    trans.addClass('not_transparent'); 
}, 2000); 

Als Alternative können Sie das nicht-Warteschlange Element in die Warteschlange hinzufügen .queue() verwenden, obwohl ich glaube, ein setTimeout wäre besser.

$('.transparent').removeClass('transparent').delay(2000).queue(function(nxt) { 
     $(this).addClass('not_transparent'); 
     nxt(); 
}); 
+3

ok, deshalb. Sinn ergeben. setTimeout ist es :) – s84

+0

warum denkst du setTimeout ist besser? – s84

+3

@Sam: Es ist nur sehr einfach und eine native Implementierung. Ich weiß nicht, welche Art von Overhead mit 'queue()' verbunden ist, aber ich bin sicher, es ist ein bisschen mehr als das 'setTimeout'. – user113716

0

.delay() nicht mit dem .addClass() Tag außerhalb einer Funktion arbeiten, so benutzen Sie einfach:

delay(); 
function delay(){ 
    $('.pgtitle').delay(5000).fadeIn(0).addClass('animated bounceInDown'); 
} 
3

Ich weiß, dass dies eine alte Frage, aber es gibt noch viel Verkehr hier von Google kommen so Ich füge meine zwei Cents hinzu;

könnten Sie so etwas wie verwenden -

$('.transparent').fadeIn().delay(500).queue(function(){ 
 
    $('.transparent').addClass('yourclass'); 
 
});

Sie können eine Funktion in die Warteschlange übergeben, um sie nach der Verzögerung auszuführen. Habe das selbst für sehr ähnliche Beispiele benutzt.