Animation: overallProgress-Eigenschaft
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die overallProgress
-Eigenschaft, die nur lesbar ist und zur Animation
-Schnittstelle gehört, gibt eine Zahl zwischen 0
und 1
zurück, die den Gesamtfortschritt der Animation in Richtung ihres finalen Zustands angibt. Dies ist der Gesamtfortschritt über alle Iterationen der Animation hinweg, nicht bei jeder einzelnen Iteration.
overallProgress
funktioniert konsistent bei allen Animationen, 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 Wert gesetzt ist, der keine Zeit darstellt.
Wenn die iterations
-Eigenschaft der Animation auf Infinity
gesetzt ist, oder wenn ihre currentTime
auf einen negativen Wert gesetzt ist, wird overallProgress
0
zurückgeben.
Wenn die duration
der Animation auf 0
gesetzt ist, wird overallProgress
1
zurückgeben.
Beispiele
Anzeige eines Prozentfortschritts
Dieses Demo verwendet overallProgress
, um eine "Prozentfortschritt"-Anzeige zu erzeugen, die auf dem Bildschirm angezeigt wird, während eine Animation läuft.
HTML
Das HTML enthält ein <button>
, das gedrückt werden kann, um die Animation zu starten, ein <p>
-Element, in dem der Prozentfortschritt angezeigt wird, und ein <div>
, das animiert wird.
<button>Run animation</button>
<p class="progress">Progress: 0%</p>
<div class="box"></div>
Das CSS des Demos bietet einige grundlegende Styles, die nicht wichtig sind, um zu verstehen, wie das JavaScript funktioniert, daher haben wir sie der Kürze halber ausgeblendet.
JavaScript
Im JavaScript beginnen wir damit, Referenzen zu den <button>
, <p>
, und <div>
-Elementen zu erhalten.
Wir erstellen dann:
- eine
animation
-Variable, die auf die Animation verweist, sobald wir sie erstellt haben - ein keyframes-Array
- ein Optionsobjekt, das Zeitsteuerungseigenschaften enthält.
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 dem <button>
einen "click"
-Event-Listener über addEventListener()
hinzu, damit, wenn er gedrückt wird, es:
- Die Animation startet, indem
Element.animate()
verwendet wird. Dabei werden die zuvor definierten Keyframes und Optionen übergeben und die zurückgegebeneAnimation
-Instanz deranimation
-Variable zugewiesen. - Eine Funktion namens
updateProgress()
über die MethoderequestAnimationFrame()
ausführt, die das Anzeigen des Prozentfortschritts aktualisiert.
btn.addEventListener("click", () => {
// Animate the box
animation = box.animate(keyframes, timingProps);
// Start updating the progress percentage via rAF()
requestAnimationFrame(updateProgress);
});
Nun definieren wir die Funktion updateProgress()
. Diese fragt Animation.playState
ab, um zu sehen, ob die Animation nicht abgeschlossen ist. Falls sie nicht abgeschlossen ist, wird der aktuelle Wert von overallProgress
genommen, mit 100 multipliziert und das Ergebnis abgerundet, um es in eine ganze Prozentzahl umzurechnen. Dann wird der textContent
-Wert des <p>
-Elements damit aktualisiert. Anschließend wird requestAnimationFrame(updateProgress)
erneut aufgerufen, um das Aktualisieren des Prozentfortschritts neu zu starten.
Wenn die Animation abgeschlossen ist, wird der Prozentfortschritt durch eine "Fertig!"-Nachricht ersetzt, und requestAnimationFrame(updateProgress)
wird nicht erneut aufgerufen, wodurch die Aktualisierungen des Prozentfortschritts gestoppt werden.
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 weitere Methoden und Eigenschaften, die Sie verwenden können, um Webseitenanimationen zu steuern.- Web Animations API