Signatur
Beschreibung
Die Eigenschaft reason des VRDisplayEvent-Interfaces gibt an, warum ein WebVR-Ereignis ausgelöst wurde. Das ist vor allem bei Ereignissen wie vrdisplayactivate, vrdisplaydeactivate oder vrdisplaypresentchange nützlich. Die Anwendung kann damit unterscheiden, ob der Nutzer das Headset aufgesetzt hat oder ob eine Seitennavigation innerhalb von VR stattfand.
Der Wert gehört zur Aufzählung VRDisplayEventReason und ist eine dieser Zeichenketten:
"mounted": Das Headset wurde aufgesetzt und das Display ist bereit."navigation": Die Seite wurde von einer anderen Seite aus aufgerufen, die bereits im VR-Modus lief. Die neue Seite sollte die Darstellung dann sofort mitVRDisplay.requestPresent()fortsetzen."requested": Der Nutzer hat die Darstellung über die Oberfläche des Browsers oder des Geräts angefordert, z. B. über einen Knopf."unmounted": Das Headset wurde abgesetzt.
Gibt es keinen bestimmten Grund, ist der Wert null bzw. undefined. Die Eigenschaft ist schreibgeschützt. Beim Erzeugen eines Ereignisses mit new VRDisplayEvent(type, init) kann sie aber über init.reason gesetzt werden.
Rückgabewert
VRDisplayEventReason, der den Auslöser beschreibt, oder null, wenn es keinen bestimmten Grund gibt.Beispiele
VR-Darstellung nach Navigation automatisch fortsetzen
const canvas = document.querySelector('#vr-canvas');
window.addEventListener('vrdisplayactivate', async (event) => {
// Nur bei Navigation aus einer VR-Seite oder beim Aufsetzen sofort starten
if (event.reason === 'navigation' || event.reason === 'mounted') {
try {
await event.display.requestPresent([{ source: canvas }]);
console.log(`Präsentation gestartet (Grund: ${event.reason})`);
} catch (err) {
console.error('requestPresent fehlgeschlagen:', err);
}
}
});
Pausieren beim Absetzen des Headsets (on-Property)
let paused = false;
window.onvrdisplaydeactivate = (event) => {
if (event.reason === 'unmounted') {
paused = true;
console.log('Headset abgesetzt – Spiel pausiert');
}
};
window.onvrdisplayactivate = (event) => {
if (event.reason === 'mounted' && paused) {
paused = false;
console.log('Headset aufgesetzt – Spiel läuft weiter');
}
};
Feature-Erkennung und synthetisches Ereignis
if ('VRDisplayEvent' in window && navigator.getVRDisplays) {
const [display] = await navigator.getVRDisplays();
if (display) {
const evt = new VRDisplayEvent('vrdisplayactivate', {
display,
reason: 'requested'
});
console.log(evt.reason);
}
} else {
console.log('WebVR nicht verfügbar – WebXR verwenden');
}
// Wichtig · Fallstricke
Veraltet: Die WebVR-API und damit auch VRDisplayEvent.reason wurden nie standardisiert und durch die WebXR Device API ersetzt. Aktuelle Versionen von Chrome, Edge und Firefox unterstützen WebVR nicht mehr. Für neue Projekte solltest du XRSession und die zugehörigen Ereignisse wie visibilitychange und end verwenden.
- Prüfe die Unterstützung immer vorher, z. B. mit
'VRDisplayEvent' in window. - Rechne damit, dass
reasonnulloderundefinedist, etwa beivrdisplayconnectodervrdisplaydisconnect. Behandle den Wert nicht als garantiert vorhanden. requestPresent()braucht normalerweise eine Nutzeraktion. Innerhalb einesvrdisplayactivate-Handlers mit dem Grund"navigation"oder"mounted"erlauben Browser den Aufruf aber auch ohne Klick.- Es gibt nur vier Werte, der Wert ist also nicht wirklich „menschenlesbar“. Zeige ihn Nutzern nicht direkt an, sondern übersetze ihn vorher.