Die CSS-Animation wird beim Zurücksetzen der Klasse nicht neu gestartet

8

Ich benutze CSS Shader + Animation. Meine Shader-Klasse ist wie folgt definiert:

%Vor%

Ich versuche, die Stile (Shader + Animation) dynamisch zu setzen / zu setzen, indem ich jquery über $('#holder').addClass('shader'); und $('#holder').removeClass('shader');

benutze

Das seltsame Ding ist jedoch, wenn ich die Klasse zurücksetze (z. B. addClass nach removeClass aufrufen), nur der Shader wird erneut angewendet, aber die Animation nicht (Ich habe das AnimationStart-Ereignis angehakt, um zu sehen, wann meine Animation startet). Wer weiß warum das so ist und wie kann ich das lösen?

Bearbeiten: Ich habe hier eine vereinfachte Version von JSfiddle Snippet hinzugefügt . Im Wesentlichen werde ich die Animation zweimal auf ein div anwenden, aber die tatsächliche Animation wird nur beim ersten Mal aufgerufen.

    
Discombobulous 17.04.2013, 03:24
quelle

6 Antworten

4

Ich denke, ich habe es herausgefunden. Laut diesem kann die CSS-Animation nicht zweimal auf denselben Knoten angewendet werden (auch wenn Sie einen anderen haben) Animation!). Also musste ich den Knoten klonen, das Original entfernen und den geklonten Knoten hinzufügen.

    
Discombobulous 17.04.2013, 05:19
quelle
23

Das Problem besteht darin, dass Sie zwar die animierte Klasse entfernen und dann erneut anwenden, dies jedoch im Verlauf einer einzelnen blockierenden Funktion tun. Wenn die Funktion beendet wird, erscheint der Rendering-Engine, dass sich nichts geändert hat.

Eine Lösung (diejenige, die Sie gewählt haben) besteht darin, das Element zu klonen und das Original zu zerstören. Das ist in Ordnung, aber wenn Sie irgendwelche Eventbindungen an das ursprüngliche Element haben (ich denke), werden sie auch zerstört.

Ein anderer Ansatz besteht darin, die animierte Klasse aus dem Element zu entfernen und dann den Code, der die Klasse innerhalb eines setTimeout () -Aufrufs erneut anwendet, mit einer sehr kleinen Verzögerung zu umbrechen, z. B.

%Vor%

Ich habe Ihre Datei optimiert, um diesen Ansatz zu verwenden: Ссылка

    
NobodyMan 17.05.2013 23:42
quelle
3

Laut einem Artikel von 2011 auf css-tricks.com wird ein Reflow zwischen Entfernen und Hinzufügen ausgelöst Die Klasse startet die Animation neu. Beispiel (ausführlich):

%Vor%     
feklee 06.06.2014 15:04
quelle
1

Sie müssen Ihr Element neu erstellen.

%Vor%     
wishmaster35 09.10.2015 19:24
quelle
0

Versuchen Sie, dies zu verwenden, nachdem Sie die Animation angewendet haben - vorausgesetzt, dass "e" Ihr animiertes Element ist:

%Vor%     
ElDoRado1239 29.04.2015 15:14
quelle
0

Sie müssen die Klasse, die die Animation enthält, definitiv entfernen und sie dann erneut hinzufügen. Es sollte auch ohne .offsetWidth funktionieren. Es hat für mich funktioniert. Also

%Vor%

sollte den Trick machen.

    
M Brank 10.06.2017 23:03
quelle

Tags und Links