Start · Sprachen · JavaScript · Referenz · TextTrackCue.endTime

TextTrackCue.endTime

Eigenschaft

Liest oder setzt die Endzeit einer Cue in Sekunden, gemessen relativ zum Beginn der Medienzeitleiste.

seit JavaScript Baseline: alle modernen Browser Kategorie: webapi

Signatur

TextTrackCue.endTime

Beschreibung

Die Eigenschaft endTime des Interfaces TextTrackCue ist ein number-Wert in Sekunden. Er legt fest, wann eine Cue (z. B. eine Untertitelzeile oder ein Kapitelmarker) endet. Gemessen wird ab dem Beginn der Medienzeitleiste des zugehörigen <video>- oder <audio>-Elements. Ist die Wiedergabeposition größer oder gleich endTime, gilt die Cue nicht mehr als aktiv und der Browser löst auf ihr das Ereignis exit aus.

Die Eigenschaft lässt sich lesen und schreiben. So kannst du Untertitel zur Laufzeit verschieben, verlängern oder kürzen, etwa um den Versatz einer WebVTT-Datei auszugleichen oder um Cues dynamisch zu erzeugen, zum Beispiel bei der Live-Transkription. In der Praxis arbeitest du meist mit der Unterklasse VTTCue, deren Konstruktor new VTTCue(startTime, endTime, text) den Wert direkt setzt.

Zusammen mit startTime bestimmt endTime das Zeitfenster, in dem die Cue in TextTrack.activeCues steht. Beachte, dass endTime nicht vor startTime liegen sollte, sonst wird die Cue nie aktiv.

Parameter

Name Typ Default Beschreibung
$value number Beim Setzen: neue Endzeit in Sekunden (Gleitkommazahl, z. B. 12.5). Muss eine endliche Zahl sein.

Rückgabewert

Typ
number
Beschreibung
Die Endzeit der Cue in Sekunden als Gleitkommazahl.

Beispiele

Endzeiten aller Cues einer Untertitelspur auslesen

const video = document.querySelector('video');
const track = video.textTracks[0];
track.mode = 'hidden'; // Cues laden, ohne sie anzuzeigen

video.addEventListener('loadedmetadata', () => {
  for (const cue of track.cues) {
    console.log(`${cue.startTime.toFixed(2)}s – ${cue.endTime.toFixed(2)}s: ${cue.text}`);
  }
});
0.00s – 2.50s: Hallo! 2.50s – 5.00s: Willkommen zum Video.

Cue dynamisch erzeugen und Endzeit später verlängern

const video = document.querySelector('video');
const track = video.addTextTrack('subtitles', 'Deutsch', 'de');
track.mode = 'showing';

const cue = new VTTCue(1, 3, 'Achtung, gleich geht es los!');
track.addCue(cue);
console.log(cue.endTime);

// Text soll zwei Sekunden länger sichtbar bleiben
cue.endTime += 2;
console.log(cue.endTime);
3 5

Zeitversatz einer ganzen Spur korrigieren

const shiftTrack = (track, offsetSeconds) => {
  for (const cue of Array.from(track.cues)) {
    // Erst endTime anpassen, damit bei positivem Versatz start <= end bleibt
    cue.endTime = Math.max(0, cue.endTime + offsetSeconds);
    cue.startTime = Math.max(0, cue.startTime + offsetSeconds);
  }
};

const track = document.querySelector('video').textTracks[0];
track.mode = 'showing';
shiftTrack(track, 0.75); // Untertitel 0,75 s später anzeigen

Auf das Ende einer Cue reagieren

const cue = new VTTCue(10, 12.5, 'Kapitel 1');
cue.addEventListener('exit', () => {
  console.log(`Cue endete bei ${cue.endTime} s`);
});

const track = document.querySelector('video').addTextTrack('metadata');
track.mode = 'hidden';
track.addCue(cue);
Cue endete bei 12.5 s

// Wichtig · Fallstricke

  • Sichtbarkeit der Cues: track.cues ist null, solange der Modus der Spur "disabled" ist. Setze mode vorher auf "hidden" oder "showing".
  • Ungültige Werte: Wenn du NaN oder Infinity zuweist, wirft der Browser einen TypeError. Liegt endTime vor startTime, gibt es keinen Fehler, die Cue wird aber nie aktiv.
  • Genauigkeit: Das exit-Ereignis und die Aktualisierung von activeCues hängen am Takt von timeupdate (typischerweise alle 15–250 ms). Das Ende einer Cue wird also nicht auf die Millisekunde genau erkannt.
  • Reihenfolge beim Verschieben: Die Cue-Liste ist nach startTime und endTime sortiert. Nach einer Änderung sortiert der Browser sie neu, was beim Durchlaufen der Liste in einer Schleife zu übersprungenen Einträgen führen kann. Kopiere die Liste deshalb vorher mit Array.from().
  • Kompatibilität: Wird von allen modernen Browsern unterstützt. TextTrackCue selbst lässt sich nicht instanziieren, verwende dafür VTTCue. In älteren Versionen von Edge und IE hieß die Klasse TextTrackCue und hatte einen eigenen Konstruktor.