Start · Sprachen · JavaScript · Referenz · Window: vrdisplaydeactivate

Window: vrdisplaydeactivate

Ereignis

Wird ausgelöst, wenn ein VR-Display nicht mehr für die Präsentation bereitsteht, z. B. weil das Headset nach längerer Inaktivität in den Standby-Modus wechselt.

seit JavaScript Veraltet (WebVR 1.1, nie standardisiert) – ersetzt deprecated seit ja Kategorie: webapi

Signatur

window.addEventListener("vrdisplaydeactivate", handler)

Beschreibung

Das Ereignis vrdisplaydeactivate gehört zur veralteten WebVR API. Der Browser löst es am Window-Objekt aus, sobald ein VR-Display (VRDisplay) nicht mehr präsentieren kann. Das passiert zum Beispiel, wenn ein Head-Mounted Display (HMD) nach einer Weile ohne Nutzung in den Standby- oder Schlafmodus geht oder der Nutzer das Headset absetzt.

Es ist das Gegenstück zu vrdisplayactivate. Typischerweise nutzt man es, um eine laufende Präsentation sauber zu beenden, die Render-Schleife anzuhalten, Ressourcen freizugeben oder die Oberfläche wieder in die normale 2D-Ansicht zurückzuschalten.

Der Handler bekommt ein VRDisplayEvent. Dessen Eigenschaft display verweist auf das betroffene VRDisplay, und reason nennt den Grund der Deaktivierung, etwa "unmounted". Einen Listener registriert man mit window.addEventListener("vrdisplaydeactivate", …) oder über die Eigenschaft window.onvrdisplaydeactivate.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses: "vrdisplaydeactivate".
$handler Pflicht (event: VRDisplayEvent) => void Callback, der ein VRDisplayEvent mit den Eigenschaften display und reason bekommt.
$options boolean | AddEventListenerOptions false Optionale Listener-Optionen wie once, signal oder passive.

Rückgabewert

Typ
void
Beschreibung
addEventListener gibt nichts zurück.

Beispiele

Präsentation bei Deaktivierung beenden

let rafId = null;

const onDeactivate = async (event) => {
  const { display, reason } = event;
  console.log(`Display "${display.displayName}" deaktiviert, Grund: ${reason}`);

  if (rafId !== null) {
    display.cancelAnimationFrame(rafId);
    rafId = null;
  }
  if (display.isPresenting) {
    await display.exitPresent();
  }
};

if ('getVRDisplays' in navigator) {
  window.addEventListener('vrdisplaydeactivate', onDeactivate);
} else {
  console.log('WebVR wird nicht unterstützt');
}
Display "Oculus Rift CV1" deaktiviert, Grund: unmounted

Alternative über die on-Property

window.onvrdisplaydeactivate = (event) => {
  document.body.classList.remove('vr-mode');
  console.log('Zurück zur 2D-Ansicht');
};

// Handler wieder entfernen
// window.onvrdisplaydeactivate = null;
Zurück zur 2D-Ansicht

Listener mit AbortController wieder entfernen

const controller = new AbortController();

window.addEventListener('vrdisplaydeactivate', (e) => {
  console.log('Deaktiviert:', e.display.displayId);
}, { signal: controller.signal });

// Später, z. B. wenn die VR-Szene zerstört wird:
controller.abort();

// Oder klassisch mit einer benannten Funktion:
const handler = () => console.log('deaktiviert');
window.addEventListener('vrdisplaydeactivate', handler);
window.removeEventListener('vrdisplaydeactivate', handler);

// Wichtig · Fallstricke

Veraltet und nicht standardisiert: Die WebVR API wurde nie als Standard verabschiedet und ist durch die WebXR Device API ersetzt. Chrome, Edge und Firefox haben WebVR entfernt oder abgeschaltet. Nur alte Versionen oder Spezialbrowser wie der alte Oculus Browser und Firefox Reality haben es unterstützt. Für neuen Code solltest du XRSession mit dem Ereignis end bzw. visibilitychange verwenden.

  • Prüfe vorher, ob die Funktion vorhanden ist ('getVRDisplays' in navigator). Wenn nicht, wird das Ereignis einfach nie ausgelöst, und es gibt keine Fehlermeldung.
  • Die möglichen Werte von reason hängen vom Browser ab und müssen nicht belegt sein. Verlass dich also nicht darauf.
  • Auch beim Deaktivieren musst du die Render-Schleife (VRDisplay.requestAnimationFrame) selbst anhalten, sonst verbraucht sie weiter Rechenzeit.
  • WebVR setzt einen sicheren Kontext (HTTPS) voraus.