Start · Sprachen · JavaScript · Referenz · CaptureController.zoomLevel

CaptureController.zoomLevel

Eigenschaft

Liefert den aktuellen Zoomfaktor der erfassten Browser-Tab-Oberfläche als ganze Prozentzahl (z. B. <code>100</code> für 100 %). Nur lesbar.

seit JavaScript Chromium 136+ (Captured Surface Control API, exper Kategorie: webapi

Signatur

CaptureController.zoomLevel

Beschreibung

zoomLevel gehört zur Captured Surface Control API. Sie erweitert das Interface CaptureController, das man über die Option controller an navigator.mediaDevices.getDisplayMedia() übergibt. Über die Eigenschaft liest eine Anwendung den aktuellen Zoomfaktor des erfassten Tabs aus, also nicht den der eigenen Seite. Der Wert ist eine ganze Zahl in Prozent, zum Beispiel 100, 125 oder 67.

Typischer Einsatz sind Videokonferenz- und Präsentations-Apps. Man teilt einen Tab, etwa mit Folien, und möchte dessen Zoom direkt aus der eigenen Oberfläche steuern, ohne zum geteilten Tab zu wechseln. zoomLevel zeigt dabei den aktuellen Wert an, zum Beispiel in einer Beschriftung wie „125 %“. Geändert wird der Zoom über increaseZoomLevel(), decreaseZoomLevel() und resetZoomLevel(). Welche Stufen es gibt, liefert getSupportedZoomLevels().

Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wie controller.zoomLevel = 150 ändert nichts. Der Zoom kann sich auch ändern, wenn Nutzer im erfassten Tab selbst zoomen, zum Beispiel mit Strg + Mausrad. Deshalb sollte man auf das Ereignis zoomlevelchange hören und die Anzeige dort aktualisieren, statt den Wert nur einmal auszulesen.

Rückgabewert

Typ
number
Beschreibung
Aktueller Zoomfaktor des erfassten Tabs als ganze Zahl in Prozent, z. B. 100. Der Wert entspricht immer einem Eintrag aus getSupportedZoomLevels().

Beispiele

Tab erfassen und Zoomfaktor auslesen

const controller = new CaptureController();

const startCapture = async () => {
  const stream = await navigator.mediaDevices.getDisplayMedia({
    video: true,
    controller,
    preferCurrentTab: false
  });

  const [track] = stream.getVideoTracks();
  // Zoom lässt sich nur bei Browser-Tabs steuern
  if (track.getSettings().displaySurface !== 'browser') {
    console.log('Kein Tab erfasst – Zoom-Steuerung nicht verfügbar.');
    return;
  }

  console.log(`Aktueller Zoom: ${controller.zoomLevel} %`);
};

document.querySelector('#share').addEventListener('click', startCapture);
Aktueller Zoom: 100 %

Zoom-Anzeige mit Plus-/Minus-Schaltflächen synchron halten

const controller = new CaptureController();
const label = document.querySelector('#zoom-label');
const updateLabel = () => {
  label.textContent = `${controller.zoomLevel} %`;
};

// Wird auch ausgelöst, wenn Nutzer direkt im erfassten Tab zoomen
controller.addEventListener('zoomlevelchange', updateLabel);

document.querySelector('#zoom-in').addEventListener('click', async () => {
  try {
    await controller.increaseZoomLevel(); // braucht eine Nutzeraktion
  } catch (err) {
    console.warn('Zoom nicht möglich:', err.name);
  }
});

document.querySelector('#zoom-out').addEventListener('click', () =>
  controller.decreaseZoomLevel().catch((err) => console.warn(err.name))
);

document.querySelector('#share').addEventListener('click', async () => {
  await navigator.mediaDevices.getDisplayMedia({ video: true, controller });
  updateLabel();
});
Die Beschriftung zeigt z. B. „100 %“ und danach „110 %“.

Grenzen erkennen und Schaltflächen deaktivieren

const updateButtons = (controller) => {
  const levels = controller.getSupportedZoomLevels();
  const current = controller.zoomLevel;

  document.querySelector('#zoom-out').disabled = current === levels[0];
  document.querySelector('#zoom-in').disabled = current === levels.at(-1);
  document.querySelector('#zoom-reset').disabled = current === 100;

  console.log(`Zoom ${current} % (Bereich ${levels[0]}–${levels.at(-1)} %)`);
};
Zoom 100 % (Bereich 25–500 %)

// Wichtig · Fallstricke

  • Browserunterstützung: Die API ist experimentell. Bisher gibt es sie nur in Chromium-basierten Browsern auf dem Desktop, nicht in Firefox und nicht in Safari. Deshalb vorher die Unterstützung prüfen, z. B. mit 'zoomLevel' in CaptureController.prototype.
  • Nur Browser-Tabs: Wird ein Fenster oder der ganze Bildschirm geteilt, gibt es keinen steuerbaren Zoom. Dasselbe gilt vor dem Start und nach dem Ende der Erfassung. Der Zugriff liefert dann keinen sinnvollen Wert oder löst je nach Implementierung einen Fehler aus (InvalidStateError). Deshalb vorher track.getSettings().displaySurface === 'browser' prüfen.
  • Schreibgeschützt: Eine Zuweisung wird still ignoriert. Zum Ändern dienen increaseZoomLevel(), decreaseZoomLevel() und resetZoomLevel(). Diese Methoden brauchen eine vorübergehende Nutzeraktion (transient user activation), also z. B. einen Klick.
  • Berechtigung: Die Steuerung kann durch die Permissions Policy captured-surface-control eingeschränkt sein. Außerdem fragt der Browser die Nutzer gegebenenfalls einmal um Erlaubnis.
  • Der Wert ist kein Faktor wie 1.25, sondern eine Prozentzahl wie 125. Er sagt nichts über devicePixelRatio oder den Zoom der eigenen Seite aus.