Signatur
Beschreibung
Die schreibgeschützte Eigenschaft timestamp des Interfaces VRFrameData aus der veralteten WebVR-API enthält einen monoton steigenden Zeitwert vom Typ DOMHighResTimeStamp. Er gibt an, zu welchem Zeitpunkt die Pose- und Matrixdaten des Objekts zuletzt durch VRDisplay.getFrameData() aktualisiert wurden.
Nützlich ist der Wert vor allem, um Zeitdifferenzen zwischen zwei Frames zu berechnen, etwa für bildratenunabhängige Animationen und Physik oder um festzustellen, ob seit dem letzten Aufruf überhaupt neue Sensordaten vorliegen. Weil derselbe VRFrameData-Eintrag normalerweise bei jedem Frame wiederverwendet wird, ist der Zeitstempel die einfachste Möglichkeit, verschiedene Updates auseinanderzuhalten.
Der Wert ist eine Millisekundenangabe mit Nachkommastellen. Seine absolute Größe hat keine feste Bedeutung. Aussagekräftig sind nur Differenzen zwischen zwei Werten desselben Displays.
Rückgabewert
Beispiele
Zeitstempel des aktuellen Frames auslesen
const frameData = new VRFrameData();
const [display] = await navigator.getVRDisplays();
const onFrame = () => {
display.getFrameData(frameData);
console.log('Frame-Update um', frameData.timestamp.toFixed(2), 'ms');
display.requestAnimationFrame(onFrame);
};
display.requestAnimationFrame(onFrame);
Delta-Zeit für bildratenunabhängige Animation
const frameData = new VRFrameData();
let lastTimestamp = null;
let rotation = 0;
const speed = 90; // Grad pro Sekunde
const [display] = await navigator.getVRDisplays();
const render = () => {
display.getFrameData(frameData);
if (lastTimestamp !== null) {
const deltaSec = (frameData.timestamp - lastTimestamp) / 1000;
rotation = (rotation + speed * deltaSec) % 360;
}
lastTimestamp = frameData.timestamp;
// ... Szene mit rotation und frameData.pose zeichnen ...
display.submitFrame();
display.requestAnimationFrame(render);
};
display.requestAnimationFrame(render);
Prüfen, ob neue Sensordaten vorliegen
const frameData = new VRFrameData();
let previous = 0;
const hasNewPose = (display) => {
display.getFrameData(frameData);
const isNew = frameData.timestamp > previous;
previous = frameData.timestamp;
return isNew;
};
if ('getVRDisplays' in navigator) {
const [display] = await navigator.getVRDisplays();
if (display) console.log('Neue Pose:', hasNewPose(display));
} else {
console.log('WebVR nicht verfügbar – bitte WebXR verwenden.');
}
// Wichtig · Fallstricke
- Veraltet: WebVR ist obsolet und wurde von der WebXR Device API abgelöst. Dort übernimmt der
time-Parameter desXRSession.requestAnimationFrame()-Callbacks diese Aufgabe (zusammen mitXRFrame). - Kompatibilität: Die API gab es nur in wenigen Browsern (z. B. Firefox bis Version 98, ältere Chromium-Builds hinter einem Flag, Samsung Internet, Oculus Browser). In aktuellen Browsern fehlt
navigator.getVRDisplaysmeist ganz. Deshalb vorher per Feature-Erkennung prüfen. - Der Wert ist erst aussagekräftig, nachdem
VRDisplay.getFrameData()aufgerufen wurde. Ein frisch erzeugtesVRFrameData-Objekt enthält noch keinen sinnvollen Zeitstempel. - Die Zeitbasis kann sich von
Date.now()unterscheiden. Nur Differenzen zwischen Zeitstempeln derselben Quelle ergeben Sinn. Wie genau der Wert ist, kann der Browser aus Datenschutzgründen einschränken. - Die Eigenschaft ist schreibgeschützt. Wer ihr etwas zuweist, bewirkt nichts (im Strict Mode wirft das je nach Implementierung einen
TypeError).