VisualViewport

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2021.

Das VisualViewport-Interface der Visual Viewport API repräsentiert das visuelle Viewport für ein bestimmtes Fenster. Für eine Seite, die iframes enthält, hat jedes iframe sowie die enthaltende Seite ein einzigartiges Fensterobjekt. Jedes Fenster auf einer Seite hat einen einzigartigen VisualViewport, der die mit diesem Fenster verbundenen Eigenschaften darstellt.

Sie können den visuellen Viewport eines Fensters mit Window.visualViewport abrufen.

Hinweis: Nur das Hauptfenster hat einen visuellen Viewport, der sich vom Layout-Viewport unterscheidet. Daher ist in der Regel nur das VisualViewport-Objekt des Hauptfensters nützlich. Für ein <iframe> entsprechen visuelle Viewport-Metriken wie VisualViewport.width immer Layout-Viewport-Metriken wie document.documentElement.clientWidth.

EventTarget VisualViewport

Instanz-Eigenschaften

Erbt auch Eigenschaften von seiner Elternschnittstelle, EventTarget.

VisualViewport.offsetLeft Nur lesbar

Gibt den Versatz der linken Kante des visuellen Viewports von der linken Kante des Layout-Viewports in CSS-Pixel zurück.

VisualViewport.offsetTop Nur lesbar

Gibt den Versatz der oberen Kante des visuellen Viewports von der oberen Kante des Layout-Viewports in CSS-Pixel zurück.

VisualViewport.pageLeft Nur lesbar

Gibt die x-Koordinate des visuellen Viewports relativ zum Ursprung des anfänglichen Umgebungsblocks der oberen Kante in CSS-Pixel zurück.

VisualViewport.pageTop Nur lesbar

Gibt die y-Koordinate des visuellen Viewports relativ zum Ursprung des anfänglichen Umgebungsblocks der oberen Kante in CSS-Pixel zurück.

VisualViewport.width Nur lesbar

Gibt die Breite des visuellen Viewports in CSS-Pixel zurück.

VisualViewport.height Nur lesbar

Gibt die Höhe des visuellen Viewports in CSS-Pixel zurück.

VisualViewport.scale Nur lesbar

Gibt den Pinch-Zoom-Skalierungsfaktor zurück, der auf den visuellen Viewport angewendet wird.

Instanz-Methoden

Erbt auch Methoden von seiner Elternschnittstelle, EventTarget.

Ereignisse

Diese Ereignisse können mit addEventListener() abgehört werden oder indem ein Ereignislistener der relevanten oneventname-Eigenschaft dieser Schnittstelle zugewiesen wird.

resize

Wird ausgelöst, wenn der visuelle Viewport in der Größe geändert wird. Auch über die onresize-Eigenschaft verfügbar.

scroll

Wird ausgelöst, wenn der visuelle Viewport gescrollt wird. Auch über die onscroll-Eigenschaft verfügbar.

scrollend

Wird ausgelöst, wenn ein Scroll-Vorgang auf dem visuellen Viewport endet. Auch über die onscrollend-Eigenschaft verfügbar.

Beispiele

Ein überlagertes Feld beim Zoomen ausblenden

Dieses Beispiel, entnommen aus dem Visual Viewport README, zeigt, wie Sie einen einfachen Code schreiben, der ein überlagertes Feld ausblendet (das beispielsweise eine Werbung enthalten könnte), wenn der Benutzer hereinzoomt. Dies ist eine nette Möglichkeit, die Benutzererfahrung beim Zoomen auf Seiten zu verbessern. Ein Live-Beispiel ist ebenfalls verfügbar.

js
const bottomBar = document.getElementById("bottom-bar");
const viewport = window.visualViewport;

function resizeHandler() {
  bottomBar.style.display = viewport.scale > 1.3 ? "none" : "block";
}

window.visualViewport.addEventListener("resize", resizeHandler);

Position: device-fixed simulieren

Dieses Beispiel, ebenfalls aus dem Visual Viewport README entnommen, zeigt, wie Sie diese API verwenden, um position: device-fixed zu simulieren, das Elemente am visuellen Viewport fixiert. Ein Live-Beispiel ist ebenfalls verfügbar.

js
const bottomBar = document.getElementById("bottom-bar");
const viewport = window.visualViewport;
function viewportHandler() {
  const layoutViewport = document.getElementById("layoutViewport");

  // Since the bar is position: fixed we need to offset it by the visual
  // viewport's offset from the layout viewport origin.
  const offsetLeft = viewport.offsetLeft;
  const offsetTop =
    viewport.height -
    layoutViewport.getBoundingClientRect().height +
    viewport.offsetTop;

  // You could also do this by setting style.left and style.top if you
  // use width: 100% instead.
  bottomBar.style.transform = `translate(${offsetLeft}px, ${offsetTop}px) scale(${
    1 / viewport.scale
  })`;
}
window.visualViewport.addEventListener("scroll", viewportHandler);
window.visualViewport.addEventListener("resize", viewportHandler);

Hinweis: Diese Technik sollte mit Vorsicht angewendet werden; das Emulieren von position: device-fixed auf diese Weise kann dazu führen, dass das feste Element beim Scrollen flackert.

Spezifikationen

Specification
CSSOM View Module
# the-visualviewport-interface

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch

  • Web Viewports Explainer — nützliche Erklärung von Web-Viewport-Konzepten, einschließlich des Unterschieds zwischen visuellem Viewport und Layout-Viewport.