Animation: persist()-Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2020.

Die persist()-Methode des Animation-Interfaces der Web Animations API speichert eine Animation explizit, um zu verhindern, dass sie automatisch entfernt wird, wenn sie durch eine andere Animation ersetzt wird.

Syntax

js
persist()

Parameter

Keine.

Rückgabewert

Keine (undefined).

Beispiele

Verwendung von persist()

In diesem Beispiel haben wir drei Schaltflächen:

  • "Persistente Animation hinzufügen" und "Transiente Animation hinzufügen" fügen jeweils eine neue Transformationsanimation zum roten Quadrat hinzu. Die Animationen wechseln die Richtung: Die erste geht von links nach rechts, die zweite von rechts nach links und so weiter. "Persistente Animation hinzufügen" ruft für die erstellte Animation persist() auf.

  • Die dritte Schaltfläche, "Eine Animation abbrechen", bricht die zuletzt hinzugefügte Animation ab.

Das Beispiel zeigt eine Liste aller Animationen, die nicht abgebrochen wurden, in der Reihenfolge ihrer Hinzufügung, zusammen mit dem replaceState jeder Animation.

HTML

html
<div id="animation-target"></div>
<button id="start-persistent">Add persistent animation</button>
<button id="start-transient">Add transient animation</button>
<button id="cancel">Cancel an animation</button>
<ol id="stack"></ol>

CSS

css
div {
  width: 100px;
  height: 100px;
  background: red;
  transform: translate(100px);
}

JavaScript

js
const target = document.getElementById("animation-target");
const persistentButton = document.getElementById("start-persistent");
const transientButton = document.getElementById("start-transient");
const cancelButton = document.getElementById("cancel");
persistentButton.addEventListener("click", () => startAnimation(true));
transientButton.addEventListener("click", () => startAnimation(false));
cancelButton.addEventListener("click", cancelTop);
const stack = [];

let offset = -100;

function startAnimation(persist) {
  offset = -offset;
  const animation = target.animate(
    { transform: `translate(${100 + offset}px)` },
    { duration: 500, fill: "forwards" },
  );
  stack.push(animation);
  if (persist) {
    animation.persist();
  }
  // Add the animation to the displayed stack (implementation not shown)
  show(animation, offset);
}

function cancelTop() {
  stack.pop()?.cancel();
}

Ergebnis

Beachten Sie, dass das Hinzufügen einer neuen transienten Animation jede zuvor hinzugefügte transiente Animation ersetzt. Diese Animationen werden automatisch entfernt und ihr replaceState wird "removed" sein. Persistente Animationen hingegen werden nicht entfernt.

Beachten Sie auch, dass entfernte Animationen das Display nicht beeinflussen; die Position des <div> wird durch die aktuellste aktive oder persistente Animation bestimmt.

Spezifikationen

Specification
Web Animations
# dom-animation-persist

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch