Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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⁩.

* Some parts of this feature may have varying levels of support.

Das VisualViewport-Interface der Visual Viewport API repräsentiert das visuelle Viewport für ein bestimmtes Fenster. Für eine Seite mit iframes hat jedes iframe sowie die enthaltene Seite ein einzigartiges Fensterobjekt. Jedes Fenster auf einer Seite verfügt über ein einzigartiges VisualViewport, das die mit diesem Fenster verbundenen Eigenschaften repräsentiert.

Sie können das visuelle Viewport eines Fensters über Window.visualViewport abrufen.

Hinweis: Nur das Top-Level-Fenster hat ein visuelles Viewport, das sich vom Layout-Viewport unterscheidet. Daher ist im Allgemeinen nur das VisualViewport-Objekt des Top-Level-Fensters nützlich. Für ein <iframe> entsprechen visuelle Viewportmetriken wie VisualViewport.width immer den Layout-Viewportmetriken wie document.documentElement.clientWidth.

EventTarget VisualViewport

Instanzeigenschaften

Erbt auch Eigenschaften von seinem Elterninterface, EventTarget.

VisualViewport.offsetLeft Schreibgeschützt

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

VisualViewport.offsetTop Schreibgeschützt

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

VisualViewport.pageLeft Schreibgeschützt

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

VisualViewport.pageTop Schreibgeschützt

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

VisualViewport.width Schreibgeschützt

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

VisualViewport.height Schreibgeschützt

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

VisualViewport.scale Schreibgeschützt

Gibt den beim Pinch-Zoom angewendeten Skalierungsfaktor des visuellen Viewports zurück.

Instanzenmethoden

Erbt auch Methoden von seinem Elterninterface, EventTarget.

Ereignisse

Diese Ereignisse können Sie mit addEventListener() abhören oder indem Sie einen Ereignis-Listener der relevanten oneventname-Eigenschaft dieses Interface zuweisen.

resize

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

scroll

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

scrollend

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

Beispiele

Ausblenden eines überlagerten Kastens bei Zoom

Dieses Beispiel, entnommen aus dem Visual Viewport README, zeigt, wie Sie ein kleines Stück Code schreiben, das einen überlagerten Kasten (der z. B. eine Werbung enthalten könnte) ausblendet, wenn der Benutzer hereinzoomt. Dies ist eine schöne 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);

Simulieren von position: device-fixed

Dieses Beispiel, ebenfalls aus dem Visual Viewport README, zeigt, wie diese API verwendet werden kann, um position: device-fixed zu simulieren, welches 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 verwendet werden; das Emulieren von position: device-fixed auf diese Weise kann dazu führen, dass das fixierte Element beim Scrollen flackert.

Spezifikationen

Specification
CSSOM View Module
# the-visualviewport-interface

Browser-Kompatibilität

Siehe auch

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