W3docs

Web Animations API

Erfahren Sie, wie Sie die Web Animations API einsetzen, um Animationen mit JavaScript zu erstellen, zu steuern und zu verketten.

Die Web Animations API

Die Web Animations API (WAAPI) ermöglicht es Ihnen, Animationen direkt aus JavaScript heraus zu erstellen und zu steuern, ohne externe Bibliothek. Sie führt Animationen auf dem eigenen Compositor des Browsers aus – demselben Engine, der auch CSS-Animationen antreibt –, sodass Sie flüssige, hardwarebeschleunigte Bewegungen erhalten, aber mit der programmatischen Kontrolle von JavaScript-Animationen: Sie können Animationen zur Laufzeit abspielen, pausieren, umkehren, beschleunigen, springen und verketten.

Diese Seite behandelt die zwei Bausteine, die Sie benötigen: die Methode element.animate(), die eine Animation startet, und das Animation-Objekt, das zurückgegeben wird und mit dem Sie die Wiedergabe steuern und erkennen, wann die Animation abgeschlossen ist.

element.animate(keyframes, options)

Jede WAAPI-Animation beginnt mit einem einzigen Aufruf:

const animation = element.animate(keyframes, options);
  • keyframes — die visuellen Zustände, durch die die Animation läuft. Zwei Formen werden akzeptiert:
    • ein array von Objekten, wobei jedes Objekt einen Frame darstellt: [{ opacity: 0 }, { opacity: 1 }]
    • ein object von Arrays, wobei jede Eigenschaft ihre Werte entlang der Timeline auflistet: { opacity: [0, 1] }
  • options — entweder eine Zahl (die Dauer in Millisekunden) oder ein Timing-Objekt wie { duration: 1000, easing: "ease-in-out", fill: "forwards" }.

Der Aufruf gibt ein Animation-Objekt zurück und startet die Wiedergabe sofort. Eigenschaftsnamen verwenden die camelCase-CSS-Schreibweise (backgroundColor, nicht background-color).

Einfache Animation mit der Web Animations API

Um eine einfache Animation mit der Web Animations API zu erstellen, definieren Sie die Keyframes der Animation, geben das Zielelement an und konfigurieren die Animationsoptionen. Hier ist ein vereinfachtes Beispiel für die Animation der Deckkraft eines Elements:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Simple Opacity Animation</title>
  </head>
  <body>
    <h1>Simple Opacity Animation</h1>
    <div
      class="animated-element"
      style="width: 100px; height: 100px; background-color: blue"
    ></div>
    <button style="margin-top: 15px" onclick="startAnimation()">
      Start Animation
    </button>
    <p id="message"></p>
    <script>
      let animation;

      function startAnimation() {
        const element = document.querySelector(".animated-element");
        const keyframes = [
          { opacity: 0, offset: 0 },
          { opacity: 1, offset: 1 },
        ];
        const options = {
          duration: 1000,
          easing: "ease-in-out",
          iterations: 1,
          fill: "forwards",
        };

        // Create and play the animation
        animation = element.animate(keyframes, options);

        // Handle animation events
        animation.onfinish = () => {
          document.getElementById("message").textContent =
            "Animation finished!";
        };

        animation.oncancel = () => {
          document.getElementById("message").textContent = "Animation reset.";
        };
      }

      // Resets the animation
      function resetAnimation() {
        if (animation) {
          animation.cancel();
        }
        startAnimation(); // Restart the animation
      }
    </script>
  </body>
</html>

Dieses Beispiel zeigt, wie die Deckkraft eines Elements mithilfe der Web Animations API animiert wird. Ein Button löst die Animation aus, die die Deckkraft des Elements sanft von unsichtbar (0) auf vollständig sichtbar (1) ändert. Nach Abschluss der Animation wird dem Benutzer eine Meldung angezeigt. Dies veranschaulicht grundlegende Animationssteuerung und Ereignisbehandlung.

Timing-Optionen

Das zweite Argument von animate() steuert, wie die Animation über die Zeit abläuft. Die nützlichsten Schlüssel sind:

OptionBedeutung
durationLänge einer Iteration in Millisekunden (oder ein CSS-Zeit-String wie "1s").
iterationsWie oft die Animation wiederholt wird. Infinity für Endlosschleife.
easingDie Beschleunigungskurve: "linear", "ease", "ease-in-out" oder ein cubic-bezier(...).
fillWelcher Zustand außerhalb des aktiven Bereichs beibehalten wird. "forwards" hält den letzten Frame; "backwards" wendet den ersten Frame während delay an; "both" tut beides.
delayMillisekunden, die vor dem Start gewartet werden.
direction"normal", "reverse" oder "alternate" (hin und zurück bei jeder Iteration).

Ohne fill: "forwards" springt ein Element sofort nach Animationsende auf seine ursprünglichen Stile zurück – eine häufige Fehlerquelle. Setzen Sie es, wenn der letzte Frame erhalten bleiben soll.

Das Animation-Objekt

element.animate() gibt eine Animation-Instanz zurück. Das ist das Handle, das Sie nach dem Start der Animation verwenden:

MemberZweck
play()Wiedergabe starten oder fortsetzen.
pause()Am aktuellen Punkt einfrieren.
reverse()Vom aktuellen Punkt rückwärts zum Anfang laufen.
finish()Direkt zum Ende springen (oder zum Anfang, wenn umgekehrt).
cancel()Anhalten und alle Effekte entfernen, angewendete Stile löschen.
finishedEin Promise, das sich auflöst, wenn die Animation abgeschlossen ist – ideal für die Verkettung mit await.
playState"running", "paused", "finished" oder "idle".
playbackRateGeschwindigkeitsmultiplikator; 2 ist doppelte Geschwindigkeit, -1 spielt rückwärts.
const anim = box.animate({ transform: ["translateX(0)", "translateX(200px)"] }, 1000);

anim.pause();          // hold in place
anim.playbackRate = 2; // play twice as fast when resumed
anim.play();

anim.finished.then(() => console.log(anim.playState)); // "finished"

Da finished ein echtes Promise ist, können Sie es mit await verwenden, um Code nur nach dem Ende der Bewegung auszuführen, oder um Animationen sauber zu verketten – wie das nächste Beispiel zeigt.

Komplexe Animationen und Sequenzen

Für komplexere Animationen und Sequenzen können Sie mehrere Animationen mithilfe von Promises und async/await verketten. Hier ist ein Beispiel für die Verkettung von Animationen:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Animation Sequence</title>
  </head>
  <body>
    <h1>Animation Sequence</h1>
    <div
      class="animated-element"
      style="width: 100px; height: 100px; background-color: red"
    ></div>
    <button style="margin-top: 15px" onclick="animateSequence()">
      Start Animation
    </button>
    <p id="message"></p>
    <script>
      async function animateSequence() {
        document.getElementById("message").textContent = ""; // Clear message
        const element = document.querySelector(".animated-element");
        const animation1 = element.animate(
          { opacity: [0, 1], transform: ["scale(0)", "scale(1)"] },
          { duration: 1000, easing: "ease-in-out" }
        );

        await animation1.finished;

        const animation2 = element.animate(
          { opacity: [1, 0], transform: ["scale(1)", "scale(0)"] },
          { duration: 1000, easing: "ease-in-out" }
        );

        await animation2.finished;
        document.getElementById("message").textContent = "Sequence complete!";
      }
    </script>
  </body>
</html>

In diesem Beispiel erhöht die erste Animation die Deckkraft des Elements und skaliert es hoch; nach deren Abschluss blendet die zweite Animation das Element aus und skaliert es wieder herunter. Am Ende wird eine Abschlussmeldung angezeigt, was zeigt, wie Animationen sequenziell verkettet werden können.

Animationen steuern und verwalten

Die Web Animations API bietet auch Methoden zur Steuerung und Verwaltung von Animationen. So können Sie eine Animation beispielsweise pausieren, fortsetzen oder abbrechen. Hier ist ein Beispiel, wie man eine Animation pausiert und fortsetzt:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Toggle Animation Play/Pause</title>
  </head>
  <body>
    <h1>Toggle Play/Pause Animation</h1>
    <div
      class="animated-element"
      style="width: 100px; height: 100px; background-color: green"
    ></div>
    <button style="margin-top: 15px" onclick="togglePlayPause()">Toggle Play/Pause</button>
    <p id="message"></p>
    <script>
      let animation;

      document.addEventListener("DOMContentLoaded", function () {
        const element = document.querySelector(".animated-element");
        animation = element.animate(
          { opacity: [0, 1] },
          { 
            duration: 1000, 
            easing: "ease-in-out", 
            iterations: Infinity, 
            direction: "alternate" 
          }
        );
        animation.pause(); // Start paused

        animation.onfinish = () => {
          document.getElementById("message").textContent =
            "Animation finished!";
        };
      });

      function togglePlayPause() {
        if (animation.playState === "running") {
          animation.pause();
          document.getElementById("message").textContent = "Animation paused";
        } else {
          animation.play();
          document.getElementById("message").textContent = "Animation playing";
        }
      }
    </script>
  </body>
</html>

Dieses Beispiel zeigt, wie der Abspiel- und Pausezustand einer Animation per Klick umgeschaltet wird. Die ursprüngliche Animation lässt ein Element kontinuierlich ein- und ausblenden. Durch Klick auf einen Button kann der Benutzer die Animation pausieren, wenn sie läuft, oder abspielen, wenn sie pausiert ist. Meldungen zeigen den aktuellen Zustand der Animation an und verbessern so die Benutzerinteraktion und Kontrolle über die Animationszustände.

Web Animations API vs. CSS-Animationen

Beide laufen auf demselben Compositor, daher ist die Performance vergleichbar. Der Unterschied liegt in der Steuerung:

  • Greifen Sie auf CSS-Animationen zurück, wenn die Bewegung deklarativ und statisch ist – ein Hover-Effekt, ein Ladekreisel, ein Eingangsübergang, der sich vollständig in einem Stylesheet definieren lässt.
  • Greifen Sie auf die Web Animations API zurück, wenn die Animation von Laufzeitdaten oder Benutzereingaben abhängt: dynamische Keyframe-Werte, bedarfsgerechtes Pausieren und Fortsetzen, Verkettung mehrerer Animationen oder das Reagieren auf das Ende einer Animation über das finished-Promise.

Ein praktischer Mittelweg ist es, das Styling in Klassen zu belassen – siehe Stile und Klassen – und WAAPI nur für die Übergänge zu verwenden, die eine skriptgesteuerte Kontrolle benötigen.

Fazit

Die Web Animation API versetzt Webentwickler in die Lage, fesselnde und interaktive Animationen zu erstellen, die das Benutzererlebnis auf Websites und Webanwendungen verbessern. Wenn Sie diese API beherrschen, können Sie Animationen von einfachen Übergängen bis hin zu komplexen Sequenzen gestalten und Ihren Webdesigns eine dynamische und ansprechende Dimension verleihen. Ob Sie Benutzeroberflächen animieren, visuelle Effekte hinzufügen oder interaktive Storytelling-Elemente erstellen – die Web Animations API bietet Ihnen die Werkzeuge, um Ihre kreativen Ideen im Web zum Leben zu erwecken.

Übungen

Übung
Welche Funktionalitäten bietet die JavaScript Animation API?
Welche Funktionalitäten bietet die JavaScript Animation API?
Was this page helpful?