Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Animation: overallProgress-Eigenschaft

Die schreibgeschützte overallProgress-Eigenschaft des Animation-Interfaces gibt eine Zahl zwischen 0 und 1 zurück, die den Gesamterfolg der Animation zu ihrem Endzustand angibt. Dies ist der Gesamtfortschritt über alle Iterationen der Animation hinweg und nicht jeder einzelnen Iteration.

overallProgress funktioniert konsistent über alle Animationen hinweg, unabhängig vom Typ der timeline.

Wert

Eine Zahl zwischen 0 und 1, oder null, wenn die Animation keine Zeitleiste hat, inaktiv ist oder noch nicht abgespielt wurde, oder wenn ihre currentTime auf einen Nicht-Zeitwert gesetzt ist.

Wenn die iterations-Eigenschaft der Animation auf Infinity gesetzt ist oder ihre currentTime auf einen negativen Wert eingestellt ist, gibt overallProgress 0 zurück.

Wenn die duration der Animation auf 0 gesetzt ist, gibt overallProgress 1 zurück.

Beispiele

Anzeigen eines prozentualen Fortschritts

Dieses Demo verwendet overallProgress, um eine "Prozentfortschritts"-Anzeige zu erstellen, die während des Ablaufs einer Animation auf dem Bildschirm angezeigt wird.

HTML

Das HTML enthält einen <button>, um die Animation zu starten, ein <p>-Element, in dem der Prozentfortschritt angezeigt wird, und ein <div>, das animiert wird.

html
<button>Run animation</button>
<p class="progress">Progress: 0%</p>
<div class="box"></div>

Das CSS des Demos bietet grundlegende Stilgestaltungen, die nicht wichtig sind, um zu verstehen, wie das JavaScript funktioniert. Daher haben wir es der Kürze wegen ausgeblendet.

JavaScript

Im JavaScript beginnen wir damit, Referenzen zu den <button>, <p> und <div>-Elementen zu erfassen.

Dann erstellen wir:

  • eine Variable animation, die auf die Animation verweist, sobald wir sie erstellt haben
  • ein keyframes-Array
  • ein Optionsobjekt, das Timing-Eigenschaften enthält.
js
const btn = document.querySelector("button");
const progress = document.querySelector(".progress");
const box = document.querySelector(".box");

let animation;

const keyframes = [{ rotate: "0deg" }, { rotate: "360deg" }];

const timingProps = {
  duration: 3000,
  iterations: 1,
};

Als Nächstes fügen wir einen "click"-Ereignislistener zum <button> über addEventListener() hinzu, sodass, wenn er gedrückt wird:

  1. Die Animation mit Element.animate() gestartet wird, indem die zuvor definierten Keyframes und Optionen übergeben werden, und die zurückgegebene Animation-Instanz der Variable animation zugewiesen wird.
  2. Eine Funktion namens updateProgress() über die Methode requestAnimationFrame() ausführt, die das Aktualisieren der Prozentprozessanzeige behandelt.
js
btn.addEventListener("click", () => {
  // Animate the box
  animation = box.animate(keyframes, timingProps);
  // Start updating the progress percentage via rAF()
  requestAnimationFrame(updateProgress);
});

Definieren wir nun die updateProgress()-Funktion. Sie fragt Animation.playState ab, um festzustellen, ob die Animation nicht beendet ist. Wenn sie nicht beendet ist, erfassen wir den aktuellen Wert von overallProgress, multiplizieren ihn mit 100 und runden das Ergebnis ab, um es in eine ganze Prozentzahl umzuwandeln. Dann aktualisieren wir den textContent-Wert des <p>-Elements. Wir rufen dann requestAnimationFrame(updateProgress) erneut auf, um die Prozentsatzaktualisierung erneut auszuführen.

Wenn die Animation beendet ist, ersetzen wir den Prozentfortschritt durch die Nachricht "Fertig!" und rufen requestAnimationFrame(updateProgress) nicht auf, sodass die Prozentsatzaktualisierungen gestoppt werden.

js
function updateProgress() {
  // Check if the animation is finished
  if (animation.playState !== "finished") {
    // Convert overallProgress to a whole number percentage
    const progressPercentage = Math.floor(animation.overallProgress * 100);
    // Update the progress paragraph with the percentage
    progress.textContent = `Progress: ${progressPercentage}%`;
    // Only request the next frame if the animation is not finished
    requestAnimationFrame(updateProgress);
  } else {
    progress.textContent = "Finished!";
  }
}

Ergebnis

Die Ausgabe sieht folgendermaßen aus. Versuchen Sie, den Button zu drücken, um die Animation und den zugehörigen Fortschrittsanzeiger zu sehen.

Spezifikationen

Specification
Web Animations Level 2
# dom-animation-overallprogress

Browser-Kompatibilität

Siehe auch

  • Animation für andere Methoden und Eigenschaften, die Sie zur Steuerung von Webseitenanimationen verwenden können.
  • Web Animations API