2010-05-10 4 views
10

Was ist falsch in diesem Code? Ich versuche, diesen Effekt zu bekommen: fadeOut(500) und attr('class','myClass') um 600 Millisekunden verzögert .. dann wieder delay(600) und fadeIn(500). Die Verzögerungen passieren korrekt, aber die attr() wird nicht verzögert, es wird ausgelöst, wenn #myDiv immer noch verblasst! :. '(delay() und fadeOut() verzögern nicht attr() in der Warteschlange

$('#myDiv').fadeOut(500) 
      .delay(600) 
      .attr('class','myClass') 
      .delay(600) 
      .fadeIn(500); 

Antwort

25

Die .delay() nur die Animation oder fx Warteschlange beeinflusst (es sei denn, Sie eine andere Warteschlange angeben speziell) Beachten Sie, dass die Verkettung und Warteschlangen sind zwei deutlich unterschiedliche Konzepte, Verkettungs weiterhin die Verwendung des gleichen jquery das ist gesetzt, aber eine andere Sache ganz als alle Ereigniswarteschlangen auf Elemente in diesem Satz

der .attr() Aufruf betroffen haben, können Sie es als Rückruf zu gleichen Warteschlange hinzuzufügen haben mit .queue(), wie folgt aus:.

$('#myDiv').fadeOut(500) 
      .delay(600) 
      .queue(function(next) { $(this).attr('class','myClass'); next(); }) 
      .delay(600) 
      .fadeIn(500); 
Auch

beachten gibt es .addClass(), .removeClass() und .toggleClass() Methoden zur Verfügung, die diese etwas sauberer machen kann :)

+1

Ich denke, Sie sollten rufen '$ (this) .dequeue()' innerhalb der Funktion. Aus der Dokumentation: * Beachten Sie, dass beim Hinzufügen einer Funktion mit .queue() sicherstellen, dass .dequeue() schließlich aufgerufen wird, so dass die nächste Funktion in Zeile ausgeführt wird. * Anyway +1;) –

+0

@Felix - Woops I ' Ich nenne das normalerweise das letzte Element in der Warteschlange, guter Fang :) –

+0

Hallo Nick, vielen Dank für Ihre Antwort. Es funktioniert wie du sagst, aber die folgenden Anrufe in der Warteschlange funktionieren nicht mehr .. :( EDIT sah nur jetzt Felix Kommentar .. vielen Dank an euch beide – Luca