CSS keyframe Animation über JS mehrmals abspielen lassen?

3 Antworten

Nun das wird so aus mehren Gründen nicht funktionieren. Du fügst die animation als style hinzu. Diese bleibt jedoch bestehen und verschwindet nicht von alleine. Du müsstest also über setTimeout z.B. nach 500ms die Animation entfernen um sie anschließend wieder setzen und damit starten zu können.

Deine Variable on wird immer 1 sein, da du sie innerhalb der Funktion setzt. Du könntest eine Klasse setzen oder anhand der innerHTML bzw. innerText die Entscheidung treffen, ob du A oder B hinein schreibst. Ansonsten bräuchtest du eine globale Variable außerhalb der Funktion, was aber eher nicht schön wäre. Das togglen der Animation kann dann außerhalb der Verzweigung stehen, immerhin wird es immer gemacht, egal ob im on === 0 oder on ===  1 Fall.

An sich solltest du dir natürlich auch vernünftige Variablenamen angewöhnen und CSS und JavaScript in entsprechende Dateien auslagern.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

animation: showEffect 0.5s infinite;

Kannst auch einen delay einfügen. Eine Startverzögerung von 1.5s sähe z.B. so aus: animation: showEffect 1.5s 0.5s infinite;
Der Delay wird aber nur beim ersten Mal eingesetzt.

Hi Siris, eine Endlosscheife erreichst du über diese CSS-Property:

 animation-iteration-count: infinite;
Cloudius  27.05.2017, 14:33

Trotzdem macht dein JavaScript wie von Apachy schon erwähnt so keinen Sinn, da musst du also nochmal ran. Der einfachste Weg um die Animation per Interaktion aktivieren und auch deaktivieren zu können ist über das togglen einer CSS Klasse. Das heißt du bestimmt deine animation und animation-iteration-count in einer Klasse und fügst diese dem Element bei Klick hinzu oder entfernst sie. Schau dir dazu mal die classList Methode "toggle" an:

https://developer.mozilla.org/de/docs/Web/API/Element/classList

0