jquery: fadeOut (). leer (). append (...) .fadeIn () funktioniert nicht nur beim ersten Mal

8

Ich habe Mühe zu verstehen, warum ich das Verhalten bekomme, das ich sehe. Ich habe einen Code, der darauf abzielt, einen Container auszublenden, den Inhalt zu ersetzen und ihn dann wieder einzufügen, wenn es fertig ist.

Ich benutze jQuery, also sieht der Code so aus:

%Vor%

Wenn der Link, der diesen Übergang aktiviert, das erste Mal angeklickt wird, wird der Inhalt sofort ersetzt, dann findet das Ausblenden statt und es wird wieder eingeblendet.

Jedes Mal, wenn die Verknüpfung angeklickt wird, sehe ich das richtige Verhalten: Ausblenden und dann mit dem neuen Inhalt einblenden.

Irgendeine Idee, warum das passiert?

Ich habe eine vollständige HTML-Datei angehängt, die das Verhalten zeigt:

Ich bin ziemlich neu in jQuery und versuche, Dinge "richtig" zu machen. Alle Kommentare bezüglich Stil werden geschätzt.

%Vor%     
Pieter Breed 02.04.2011, 21:20
quelle

2 Antworten

30

Das Problem ist, dass es in jQuery zwei verschiedene Arten von Funktionen gibt - diejenigen, die sofort wirksam werden, und solche, die der Effekt-Warteschlange Effekte hinzufügen.

Sehen wir uns Ihren Code an:

%Vor%
  • fadeOut fügt der Warteschlange eine Fade-Operation hinzu
  • delay fügt der Warteschlange eine Verzögerung hinzu
  • empty leert sofort das Element
  • append hängt den Inhalt sofort an
  • fadeIn fügt der Warteschlange eine Fade-Operation hinzu

Die Funktionen, die Elemente zur Warteschlange hinzufügen, kehren sofort zurück - sie warten nicht, bis sie abgeschlossen sind, bevor sie wirksam werden. Dies bedeutet, dass alle Funktionen (fast) zur gleichen Zeit aufgerufen werden - sie warten nicht auf das Ende der Animationsfunktionen.

Sie müssen stattdessen das Callback-Argument für fadeOut verwenden:

%Vor%

Die Funktion wird ausgelöst, wenn die Überblendungsoperation abgeschlossen ist. Daher werden das Leeren und Anhängen verzögert, bis das Element ausgeblendet wird.

    
lonesomeday 02.04.2011, 21:29
quelle
2

Sie müssen eine Callback-Funktion verwenden, um den gewünschten Effekt zu erhalten.

%Vor%

Dies stellt sicher, dass der Container erst nach Abschluss der Animation ersetzt wird.

    
Mark Brown 02.04.2011 21:27
quelle

Tags und Links