Start · Sprachen · JavaScript · Referenz · Animation.playbackRate

Animation.playbackRate

Eigenschaft

Liest oder setzt die Wiedergaberate einer Animation: <code>1</code> = normal, <code>2</code> = doppelt so schnell, negative Werte = rückwärts, <code>0</code> = angehalten.

seit JavaScript Baseline: alle modernen Browser (seit 2020) Kategorie: webapi

Signatur

Animation.playbackRate

Beschreibung

Die Eigenschaft playbackRate eines Animation-Objekts ist ein Faktor, mit dem der Fortschritt der Zeitleiste auf die aktuelle Zeit (currentTime) der Animation übertragen wird. Der Standardwert ist 1. Bei 2 läuft die Animation doppelt so schnell, bei 0.5 halb so schnell. Negative Werte lassen sie rückwärts laufen, bei 0 bleibt sie faktisch stehen, obwohl ihr Zustand weiter "running" ist.

Die Eigenschaft eignet sich für Zeitlupen- oder Zeitraffer-Effekte, für Steuerelemente, mit denen Nutzer die Geschwindigkeit regeln, und dafür, Animationen per Vorzeichenwechsel umzukehren. Das Setzen von playbackRate verändert die Animation sofort. Die aktuelle Position (currentTime) bleibt dabei erhalten, sodass die Animation nicht springt.

Wenn du ruckelfrei zwischen Geschwindigkeiten wechseln willst, gerade bei Animationen, die auf dem Compositor-Thread laufen, ist Animation.prototype.updatePlaybackRate() meist die bessere Wahl. Diese Methode gleicht die neue Rate erst mit dem Compositor ab und übernimmt sie dann. Den noch ausstehenden Wert kannst du in der Zwischenzeit nicht über playbackRate auslesen, sondern erst, nachdem das Promise ready erfüllt ist.

Parameter

Name Typ Default Beschreibung
$value number 1 Neue Wiedergaberate beim Setzen. Positive Werte laufen vorwärts, negative rückwärts, 0 hält die Animation an. Bruchzahlen sind erlaubt.

Rückgabewert

Typ
number
Beschreibung
Die aktuelle Wiedergaberate als Gleitkommazahl. Der Standardwert ist 1.

Beispiele

Animation in Zeitlupe abspielen

const box = document.querySelector('.box');
const anim = box.animate(
  [{ transform: 'translateX(0)' }, { transform: 'translateX(300px)' }],
  { duration: 2000, iterations: Infinity }
);

console.log(anim.playbackRate); // Standardwert
anim.playbackRate = 0.25; // viermal langsamer
console.log(anim.playbackRate);
1 0.25

Geschwindigkeit per Schieberegler steuern

// <input type="range" id="speed" min="0" max="4" step="0.1" value="1">
const spinner = document.querySelector('.spinner').animate(
  [{ transform: 'rotate(0turn)' }, { transform: 'rotate(1turn)' }],
  { duration: 1000, iterations: Infinity }
);

document.querySelector('#speed').addEventListener('input', (event) => {
  const rate = Number(event.target.value);
  // updatePlaybackRate sorgt für einen ruckelfreien Übergang
  spinner.updatePlaybackRate(rate);
});

Animation per Vorzeichenwechsel umkehren

const menu = document.querySelector('.menu');
const slide = menu.animate(
  [{ transform: 'translateY(-100%)' }, { transform: 'translateY(0)' }],
  { duration: 300, fill: 'both' }
);
slide.pause();

const toggleMenu = async () => {
  // Richtung umdrehen und von der aktuellen Position aus weiterspielen
  slide.playbackRate = -slide.playbackRate;
  slide.play();
  await slide.finished;
  console.log(slide.playbackRate > 0 ? 'geöffnet' : 'geschlossen');
};

document.querySelector('#toggle').addEventListener('click', toggleMenu);
geschlossen (beim ersten Klick: die Rate wird -1, das Menü fährt zurück)

// Wichtig · Fallstricke

  • Setzen vs. updatePlaybackRate(): Wenn du playbackRate direkt setzt, gilt die neue Rate sofort. Bei Animationen, die auf dem Compositor laufen, kann das zu kleinen Sprüngen führen. Für einen weichen Übergang während der Wiedergabe nimmst du besser updatePlaybackRate().
  • Rate 0: Die Animation steht still, aber playState bleibt "running" und das Promise finished wird nie erfüllt. Zum echten Anhalten verwendest du pause().
  • Negative Rate und play(): Wenn du play() mit negativer Rate aufrufst und currentTime am Anfang steht (0), springt die Animation ans Ende und läuft von dort rückwärts. reverse() kehrt das Vorzeichen um und startet die Animation in einem Schritt.
  • CSS-Animationen: Bei CSSAnimation- und CSSTransition-Objekten aus document.getAnimations() kannst du die Rate ebenfalls ändern. Sie gilt aber nur für diese eine Instanz. Wird die CSS-Animation neu erzeugt, etwa durch einen Klassenwechsel, beginnt sie wieder mit der Rate 1.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt (Chrome, Edge, Firefox, Safari 13.1+). Den Internet Explorer gibt es nicht mehr, dort fehlt die API vollständig.