Start · Sprachen · JavaScript · Referenz · PictureInPictureWindow.width

PictureInPictureWindow.width

Eigenschaft

Schreibgeschützte Eigenschaft, die die aktuelle Breite des schwebenden Bild-im-Bild-Videofensters in CSS-Pixeln liefert.

seit JavaScript Chrome/Edge 70+, Safari 13.1+ (Firefox: nicht unte Kategorie: webapi

Signatur

PictureInPictureWindow.width

Beschreibung

Die schreibgeschützte Eigenschaft width eines PictureInPictureWindow-Objekts gibt die aktuelle Breite des schwebenden Bild-im-Bild-Fensters (Picture-in-Picture, kurz PiP) als ganze Zahl in CSS-Pixeln zurück. Das Objekt bekommt man als Auflösungswert des Promise von HTMLVideoElement.requestPictureInPicture() oder über die Eigenschaft pictureInPictureWindow des Events enterpictureinpicture.

Praktisch ist die Eigenschaft vor allem dann, wenn die Qualität des Videos an die tatsächliche Fenstergröße angepasst werden soll. Beispiel: Bei adaptivem Streaming (HLS/DASH) reicht für ein kleines PiP-Fenster eine niedrigere Auflösung, was Bandbreite spart. Zusammen mit height und dem Event resize lässt sich jede Größenänderung durch den Nutzer verfolgen.

Die Breite kann man nur lesen. Wie groß das Fenster ist, bestimmen Browser und Nutzer. Sobald das Fenster geschlossen wird (Event leavepictureinpicture), liefern width und height den Wert 0.

Rückgabewert

Typ
number
Beschreibung
Breite des PiP-Fensters als ganze Zahl in CSS-Pixeln. Nachdem das Fenster geschlossen wurde, ist der Wert 0.

Beispiele

Breite direkt nach dem Öffnen auslesen

const video = document.querySelector('video');
const button = document.querySelector('#pip-button');

button.addEventListener('click', async () => {
  try {
    // Muss durch eine Nutzeraktion ausgelöst werden
    const pipWindow = await video.requestPictureInPicture();
    console.log(`PiP-Fenster: ${pipWindow.width} × ${pipWindow.height} px`);
  } catch (err) {
    console.error('Bild-im-Bild fehlgeschlagen:', err.message);
  }
});
PiP-Fenster: 400 × 225 px

Videoqualität an die Fenstergröße anpassen

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

// Wählt eine passende Qualitätsstufe anhand der Breite
const pickQuality = (width) => {
  if (width <= 320) return '240p';
  if (width <= 640) return '480p';
  return '720p';
};

const onResize = (event) => {
  const { width } = event.target;
  console.log(`Neue Breite: ${width}px → Qualität ${pickQuality(width)}`);
};

video.addEventListener('enterpictureinpicture', (event) => {
  const pipWindow = event.pictureInPictureWindow;
  console.log('Startqualität:', pickQuality(pipWindow.width));
  pipWindow.addEventListener('resize', onResize);

  // Beim Verlassen den Listener wieder entfernen
  video.addEventListener('leavepictureinpicture', () => {
    pipWindow.removeEventListener('resize', onResize);
    console.log('Breite nach dem Schließen:', pipWindow.width);
  }, { once: true });
});
Startqualität: 480p Neue Breite: 720px → Qualität 720p Breite nach dem Schließen: 0

Vorher prüfen, ob die API verfügbar ist

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

const supportsPiP = 'pictureInPictureEnabled' in document
  && document.pictureInPictureEnabled
  && !video.disablePictureInPicture;

if (!supportsPiP) {
  console.log('Bild-im-Bild wird nicht unterstützt.');
} else if (document.pictureInPictureElement) {
  // Es ist bereits ein PiP-Fenster offen
  console.log('Es ist bereits ein PiP-Fenster aktiv.');
}
Bild-im-Bild wird nicht unterstützt.

// Wichtig · Fallstricke

  • Nur lesbar: Wird width ein Wert zugewiesen, hat das keine Wirkung. Die Fenstergröße lässt sich per Skript nicht ändern.
  • Wert 0 nach dem Schließen: Eine gespeicherte Referenz auf das PictureInPictureWindow liefert nach leavepictureinpicture die Breite 0. Den Wert also nicht zwischenspeichern, sondern bei Bedarf neu auslesen.
  • Häufige Resize-Events: Beim Ziehen am Fensterrand wird resize sehr oft ausgelöst. Aufwendige Vorgänge wie ein Qualitätswechsel sollten deshalb gedrosselt oder verzögert werden (Throttling/Debouncing).
  • Browser-Unterstützung: Unterstützt in Chromium-Browsern (Chrome, Edge, Opera) und in Safari. Firefox bietet zwar eine eigene Bild-im-Bild-Funktion in der Oberfläche an, aber keine API dafür. Vorher mit document.pictureInPictureEnabled prüfen. Die API funktioniert nur in einem sicheren Kontext (HTTPS), und das Öffnen erfordert eine Nutzeraktion.
  • Nicht zu verwechseln mit der Document Picture-in-Picture API (documentPictureInPicture). Diese liefert ein vollständiges Window-Objekt mit innerWidth.