Start · Sprachen · JavaScript · Referenz · ImageTrackList.selectedIndex

ImageTrackList.selectedIndex

Eigenschaft

Gibt den Index des gerade ausgewählten <code>ImageTrack</code> in einer <code>ImageTrackList</code> zurück. Ist kein Track ausgewählt, ist der Wert <code>-1</code>.

seit JavaScript WebCodecs API – Chromium 94+, Firefox 133+; Safari Kategorie: webapi

Signatur

get ImageTrackList.selectedIndex

Beschreibung

Die schreibgeschützte Eigenschaft selectedIndex der Schnittstelle ImageTrackList gibt als Ganzzahl an, welcher Track eines Bildes gerade zum Dekodieren ausgewählt ist. Eine ImageTrackList bekommst du über ImageDecoder.tracks. Sie ist Teil der WebCodecs API.

Manche Bildformate enthalten mehrere Tracks, zum Beispiel AVIF-Dateien mit einem Standbild und zusätzlich einer Animation. Der ImageDecoder dekodiert immer nur den ausgewählten Track. Mit selectedIndex findest du heraus, welcher das ist, etwa um die passende Anzahl von Frames (frameCount) zu ermitteln oder um die Auswahl in einer Oberfläche anzuzeigen.

Den Wert kannst du nicht direkt setzen. Um einen anderen Track auszuwählen, setzt du die Eigenschaft selected des gewünschten ImageTrack auf true. Danach ändert sich selectedIndex entsprechend. Setzt du selected des aktuellen Tracks auf false, ist kein Track mehr ausgewählt und der Wert wird -1.

Zuverlässig ist der Wert erst, wenn das Promise ImageTrackList.ready erfüllt ist. Vorher wurden die Metadaten des Bildes eventuell noch nicht gelesen.

Rückgabewert

Typ
number
Beschreibung
Eine Ganzzahl: der Index des ausgewählten Tracks innerhalb der ImageTrackList, oder -1, wenn kein Track ausgewählt ist.

Beispiele

Ausgewählten Track eines animierten Bildes ermitteln

const response = await fetch('/bilder/animation.gif');
const decoder = new ImageDecoder({
  data: response.body,
  type: 'image/gif'
});

// Warten, bis die Track-Informationen gelesen wurden
await decoder.tracks.ready;

const { selectedIndex, length } = decoder.tracks;
console.log(`Track ${selectedIndex} von ${length} ausgewählt`);

const track = decoder.tracks[selectedIndex];
console.log('Animiert:', track.animated, '| Frames:', track.frameCount);
Track 0 von 1 ausgewählt Animiert: true | Frames: 12

Zwischen Tracks einer AVIF-Datei wechseln

const response = await fetch('/bilder/sequenz.avif');
const decoder = new ImageDecoder({
  data: await response.arrayBuffer(),
  type: 'image/avif'
});
await decoder.tracks.ready;

console.log('Vorher:', decoder.tracks.selectedIndex);

// Den ersten animierten Track suchen und auswählen
for (let i = 0; i < decoder.tracks.length; i++) {
  if (decoder.tracks[i].animated) {
    decoder.tracks[i].selected = true;
    break;
  }
}

console.log('Nachher:', decoder.tracks.selectedIndex);

// Ersten Frame des neu ausgewählten Tracks dekodieren
const { image } = await decoder.decode({ frameIndex: 0 });
console.log(image.displayWidth, image.displayHeight);
image.close();
Vorher: 0 Nachher: 1 640 480

Auswahl aufheben und auf -1 prüfen

const decoder = new ImageDecoder({
  data: await (await fetch('/bilder/logo.png')).arrayBuffer(),
  type: 'image/png'
});
await decoder.tracks.ready;

const tracks = decoder.tracks;
tracks.selectedTrack.selected = false; // Auswahl aufheben

if (tracks.selectedIndex === -1) {
  console.log('Kein Track ausgewählt – decode() ist nicht möglich.');
}

decoder.close();
Kein Track ausgewählt – decode() ist nicht möglich.

// Wichtig · Fallstricke

  • Nur lesbar: Eine Zuweisung an selectedIndex hat keine Wirkung (im Strict Mode wirft sie einen TypeError). Die Auswahl änderst du immer über ImageTrack.selected.
  • Zeitpunkt: Lies den Wert erst nach await decoder.tracks.ready. Vorher kann die Liste leer sein und der Wert -1 lauten.
  • Wert -1: Ist kein Track ausgewählt, ist auch selectedTrack gleich null, und decoder.decode() schlägt fehl. Prüfe diesen Fall, bevor du den Index zum Zugriff auf die Liste verwendest (tracks[-1] ergibt undefined).
  • Trackwechsel: Wählst du einen anderen Track aus, verwirft der Decoder bereits dekodierte Frames und noch ausstehende decode()-Aufrufe.
  • Kompatibilität: ImageDecoder und damit ImageTrackList gibt es in Chromium-Browsern ab Version 94 und in neueren Firefox-Versionen, in Safari nicht. Die API ist nur in sicheren Kontexten (HTTPS) verfügbar. Prüfe vor der Nutzung mit 'ImageDecoder' in globalThis, ob sie vorhanden ist.