Signatur
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
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');
}
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;
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
reasonhä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.