Start · Sprachen · JavaScript · Referenz · Gyroscope.y

Gyroscope.y

Eigenschaft

Schreibgeschützte Eigenschaft, die die Winkelgeschwindigkeit des Geräts um seine y-Achse in Radiant pro Sekunde liefert.

seit JavaScript Generic Sensor API — Chromium-Browser (Chrome/Edge Kategorie: webapi

Signatur

Gyroscope.y

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

Typ
number | null
Beschreibung
Winkelgeschwindigkeit um die y-Achse in rad/s. 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();
Drehrate um y: 0.012 rad/s Drehrate um y: -0.847 rad/s

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();
Kippen erkannt: nächste Seite

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();
Winkel y: 0.0° Winkel y: 3.4° Winkel y: 12.9°

// 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 Gyroscope nicht. Prüfe die Verfügbarkeit mit 'Gyroscope' in window und nimm als Ausweichlösung DeviceMotionEvent.rotationRate. Dort werden die Werte allerdings in Grad pro Sekunde angegeben, und die Achsen heißen alpha/beta/gamma.
  • Sicherer Kontext und Berechtigungen: Die API funktioniert nur über HTTPS. In iframes muss sie über die Permissions Policy gyroscope erlaubt sein, z. B. mit allow="gyroscope". Fehlende Rechte führen zu einem error-Event mit NotAllowedError, ein fehlender Sensor zu NotReadableError.
  • null-Wert: Vor dem ersten reading-Event und nach stop() ist y null. Rechnungen wie gyro.y.toFixed() werfen dann einen TypeError.
  • Drift: Wenn man Gyroskopwerte aufintegriert, sammeln sich die Messfehler mit der Zeit an. Für stabile Ausrichtungswerte eignen sich AbsoluteOrientationSensor oder RelativeOrientationSensor besser.
  • 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.