Signatur
Beschreibung
Die schreibgeschützte Eigenschaft y eines Gyroscope-Objekts enthält die zuletzt gemessene Winkelgeschwindigkeit um die y-Achse des Geräts in Radiant pro Sekunde (rad/s). Beim Smartphone in Hochformat zeigt die y-Achse vom unteren zum oberen Bildschirmrand. Eine Drehung um diese Achse entspricht also einem seitlichen „Kippen“ nach links oder rechts, wie beim Umblättern einer Buchseite.
Der Wert wird bei jedem neuen Messwert aktualisiert. Deshalb liest man ihn normalerweise im reading-Event des Sensors aus. Solange der Sensor nicht über start() aktiviert wurde oder noch keinen Messwert geliefert hat, ist y null. Das Vorzeichen folgt der Rechte-Hand-Regel: Positive Werte bedeuten eine Drehung gegen den Uhrzeigersinn, wenn man in Richtung der positiven y-Achse schaut.
Typische Einsatzgebiete sind Gestensteuerung (z. B. Kippen zum Blättern), Steuerung in Spielen, Stabilisierung und die Fusion mit Daten des Beschleunigungssensors. Zusammen mit x und z ergibt y den vollständigen Vektor der Winkelgeschwindigkeit. Wer daraus einen Drehwinkel braucht, muss die Werte über die Zeit integrieren, also mit dem Zeitabstand zwischen zwei Messungen multiplizieren und aufsummieren.
Rückgabewert
null, solange noch kein Messwert vorliegt oder der Sensor nicht aktiv ist.Beispiele
y-Drehrate im reading-Event auslesen
const gyro = new Gyroscope({ frequency: 60 });
gyro.addEventListener('reading', () => {
console.log(`Drehrate um y: ${gyro.y.toFixed(3)} rad/s`);
});
gyro.addEventListener('error', (event) => {
console.error(event.error.name, event.error.message);
});
gyro.start();
Kippgeste nach links/rechts erkennen
const SCHWELLE = 2; // rad/s
let sperre = false;
const gyro = new Gyroscope({ frequency: 30 });
gyro.onreading = () => {
if (sperre || gyro.y === null) return;
if (gyro.y > SCHWELLE) {
console.log('Kippen erkannt: vorherige Seite');
} else if (gyro.y < -SCHWELLE) {
console.log('Kippen erkannt: nächste Seite');
} else {
return;
}
sperre = true;
setTimeout(() => { sperre = false; }, 500); // Entprellen
};
gyro.start();
Drehwinkel um y durch Integration schätzen – mit Berechtigungsprüfung
const starteMessung = async () => {
if (!('Gyroscope' in window)) {
console.warn('Gyroscope wird nicht unterstützt.');
return;
}
const { state } = await navigator.permissions.query({ name: 'gyroscope' });
if (state === 'denied') {
console.warn('Zugriff auf das Gyroskop verweigert.');
return;
}
const gyro = new Gyroscope({ frequency: 60 });
let winkel = 0; // in Radiant
let letzteZeit = null; // DOMHighResTimeStamp
gyro.onreading = () => {
if (letzteZeit !== null) {
const dt = (gyro.timestamp - letzteZeit) / 1000; // Sekunden
winkel += gyro.y * dt;
}
letzteZeit = gyro.timestamp;
console.log(`Winkel y: ${(winkel * 180 / Math.PI).toFixed(1)}°`);
};
gyro.start();
};
starteMessung();
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Generic Sensor API gibt es nur in Chromium-basierten Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen
Gyroscopenicht. Prüfe die Verfügbarkeit mit'Gyroscope' in windowund nimm als AusweichlösungDeviceMotionEvent.rotationRate. Dort werden die Werte allerdings in Grad pro Sekunde angegeben, und die Achsen heißenalpha/beta/gamma. - Sicherer Kontext und Berechtigungen: Die API funktioniert nur über HTTPS. In iframes muss sie über die Permissions Policy
gyroscopeerlaubt sein, z. B. mitallow="gyroscope". Fehlende Rechte führen zu einemerror-Event mitNotAllowedError, ein fehlender Sensor zuNotReadableError. null-Wert: Vor dem erstenreading-Event und nachstop()istynull. Rechnungen wiegyro.y.toFixed()werfen dann einenTypeError.- Drift: Wenn man Gyroskopwerte aufintegriert, sammeln sich die Messfehler mit der Zeit an. Für stabile Ausrichtungswerte eignen sich
AbsoluteOrientationSensoroderRelativeOrientationSensorbesser. - Achsen und Bildschirmausrichtung: Standardmäßig beziehen sich die Achsen auf das Gerät. Mit der Option
referenceFrame: 'screen'passen sie sich der aktuellen Bildschirmausrichtung an. - Datenschutz und Akku: Aus hochfrequenten Bewegungsdaten lassen sich Nutzer wiedererkennen (Fingerprinting). Browser begrenzen deshalb die Frequenz und pausieren Sensoren in Tabs, die im Hintergrund laufen. Rufe
stop()auf, sobald du keine Daten mehr brauchst, um Akku zu sparen.