Start · Sprachen · JavaScript · Referenz · HTMLMediaElement.seeking

HTMLMediaElement.seeking

Eigenschaft

Schreibgeschützter Boolean, der angibt, ob ein <code>&lt;audio&gt;</code>- oder <code>&lt;video&gt;</code>-Element gerade zu einer neuen Wiedergabeposition springt.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLMediaElement.seeking

Beschreibung

Die Eigenschaft seeking ist true, solange das Medienelement einen Suchvorgang (Seek) ausführt, also nachdem currentTime gesetzt oder fastSeek() aufgerufen wurde und bevor die Daten an der neuen Position verfügbar sind. Sobald der Sprung abgeschlossen ist, wird sie wieder false.

Der Wert wechselt passend zu den Events: Direkt vor dem seeking-Event wird die Eigenschaft auf true gesetzt, vor dem seeked-Event wieder auf false. So lässt sich jederzeit prüfen, ob die Wiedergabe gerade einen Sprung ausführt, etwa um Ladeanzeigen einzublenden, Fortschrittsbalken nicht zu überschreiben oder Analyse-Ereignisse (z. B. „Nutzer hat gespult“) sauber zu erfassen.

Typische Einsatzfälle sind eigene Player-Oberflächen, Synchronisation mehrerer Medienelemente und das Unterdrücken von timeupdate-Logik, während der Nutzer den Schieberegler bewegt.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn gerade ein Suchvorgang läuft, sonst false. Die Eigenschaft ist schreibgeschützt.

Beispiele

Zustand direkt nach dem Setzen von currentTime prüfen

const video = document.querySelector('video');

video.addEventListener('loadedmetadata', () => {
  console.log('Vorher:', video.seeking);
  video.currentTime = 30; // Sprung auslösen
  console.log('Direkt danach:', video.seeking);
});

video.addEventListener('seeked', () => {
  console.log('Nach seeked:', video.seeking);
});
Vorher: false Direkt danach: true Nach seeked: false

Ladeanzeige während des Spulens einblenden

const video = document.querySelector('#player');
const spinner = document.querySelector('#spinner');

const updateSpinner = () => {
  spinner.hidden = !video.seeking;
};

video.addEventListener('seeking', updateSpinner);
video.addEventListener('seeked', updateSpinner);

timeupdate-Logik während eines Sprungs überspringen

const audio = document.querySelector('audio');
const progress = document.querySelector('progress');

audio.addEventListener('timeupdate', () => {
  // Keine Fortschrittsmeldung, solange noch gesprungen wird
  if (audio.seeking) return;
  progress.value = audio.currentTime / audio.duration;
  console.log(`Position: ${audio.currentTime.toFixed(1)} s`);
});
Position: 12.3 s

Auf Ende eines laufenden Sprungs warten (Promise)

const waitForSeek = (media) =>
  media.seeking
    ? new Promise((resolve) => media.addEventListener('seeked', resolve, { once: true }))
    : Promise.resolve();

const video = document.querySelector('video');
video.currentTime = 60;
await waitForSeek(video);
console.log('Bereit bei', video.currentTime);
Bereit bei 60

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie video.seeking = true wird ignoriert (im Strict Mode ohne Fehler, da nur ein Getter existiert). Einen Sprung löst man über currentTime oder fastSeek() aus.
  • Sehr kurze Dauer: Bei bereits gepufferten Daten ist der Sprung oft nach wenigen Millisekunden abgeschlossen. Wer auf Zustandsänderungen reagieren will, sollte die Events seeking/seeked nutzen statt die Eigenschaft per Timer abzufragen.
  • Wird während eines laufenden Sprungs erneut currentTime gesetzt, bricht der Browser den alten Sprung ab; seeked kommt dann meist nur einmal für die letzte Position.
  • Bei readyState === HAVE_NOTHING (keine Metadaten) ist seeking immer false, auch wenn currentTime gesetzt wurde. Der Sprung wird nachgeholt, sobald Metadaten da sind.
  • Kompatibilität: Wird in allen modernen Browsern seit Langem unterstützt (Baseline).