Start · Sprachen · JavaScript · Referenz · Accelerometer.y

Accelerometer.y

Eigenschaft

Schreibgeschützte Eigenschaft, die die aktuelle Beschleunigung des Geräts entlang seiner y-Achse in m/s² als <code>number</code> liefert.

seit JavaScript Generic Sensor API – Chromium 67+ (Chrome, Edge, O Kategorie: webapi

Signatur

Accelerometer.y

Beschreibung

Die Eigenschaft y einer Accelerometer-Instanz liefert die zuletzt gemessene Beschleunigung entlang der y-Achse des Geräts in Metern pro Sekunde zum Quadrat (m/s²). Bei einem Smartphone in Hochformat zeigt die y-Achse entlang der langen Seite des Displays nach oben, also zur Oberkante des Bildschirms.

Ein normales Accelerometer misst die Beschleunigung einschließlich der Erdanziehung. Hält man das Gerät aufrecht im Hochformat, liefert y daher etwa 9.81. Liegt es flach auf dem Tisch, geht der Wert gegen 0. Wer nur die Bewegung ohne Schwerkraft braucht, nimmt LinearAccelerationSensor. Wer ausschließlich den Schwerkraftanteil braucht, nimmt GravitySensor.

Der Wert wird erst belegt, wenn der Sensor mit start() gestartet wurde und das erste reading-Ereignis eingetroffen ist. Vorher ist y null. Typische Anwendungen sind Neigungserkennung, Schüttelgesten, Schrittzähler oder die Steuerung in Spielen.

Welches Koordinatensystem verwendet wird, legt die Konstruktor-Option referenceFrame fest: 'device' (Standard) oder 'screen'. Bei 'screen' werden die Achsen an die aktuelle Bildschirmausrichtung angepasst.

Rückgabewert

Typ
number | null
Beschreibung
Beschleunigung entlang der y-Achse in m/s² (Schwerkraft eingeschlossen). Solange noch keine Messung vorliegt oder der Sensor gestoppt ist, null.

Beispiele

y-Beschleunigung fortlaufend auslesen

if ('Accelerometer' in window) {
  const sensor = new Accelerometer({ frequency: 10 });

  sensor.addEventListener('reading', () => {
    console.log(`y: ${sensor.y.toFixed(2)} m/s²`);
  });

  sensor.addEventListener('error', (event) => {
    console.error(event.error.name, event.error.message);
  });

  sensor.start();
} else {
  console.warn('Accelerometer wird nicht unterstützt.');
}
y: 9.79 m/s² y: 9.81 m/s²

Hoch- oder Flachlage erkennen (mit Berechtigungsprüfung)

const startTiltDetection = async () => {
  const { state } = await navigator.permissions.query({ name: 'accelerometer' });
  if (state === 'denied') {
    console.warn('Zugriff auf den Beschleunigungssensor verweigert.');
    return;
  }

  const sensor = new Accelerometer({ frequency: 5, referenceFrame: 'screen' });
  sensor.onreading = () => {
    const y = sensor.y;
    if (y > 7) console.log('Gerät steht aufrecht');
    else if (y < -7) console.log('Gerät steht auf dem Kopf');
    else console.log('Gerät liegt eher flach oder ist gekippt');
  };
  sensor.start();
};

startTiltDetection();
Gerät steht aufrecht

Ruckartige Bewegung nach oben/unten erkennen

const sensor = new Accelerometer({ frequency: 60 });
let lastY = null;
const THRESHOLD = 12; // Änderung in m/s² zwischen zwei Messungen

sensor.addEventListener('reading', () => {
  if (lastY !== null && Math.abs(sensor.y - lastY) > THRESHOLD) {
    console.log('Ruck entlang der y-Achse erkannt!');
  }
  lastY = sensor.y;
});

sensor.start();

// Nach 10 Sekunden stoppen, um Akku zu sparen
setTimeout(() => {
  sensor.stop();
  console.log('Nach dem Stoppen:', sensor.y);
}, 10_000);
Ruck entlang der y-Achse erkannt! Nach dem Stoppen: null

// Wichtig · Fallstricke

  • Browser-Unterstützung: Nur in Chromium-basierten Browsern (Chrome, Edge, Opera, Samsung Internet) verfügbar. Firefox und Safari unterstützen die Generic Sensor API nicht; dort als Ausweichlösung devicemotion mit event.accelerationIncludingGravity.y verwenden.
  • Sicherer Kontext: Funktioniert nur über HTTPS (oder localhost). In iframes muss die Permissions Policy accelerometer erlaubt sein, sonst tritt ein SecurityError auf.
  • null vor der ersten Messung: Direkt nach start() ist y noch null. Den Wert deshalb immer im reading-Handler lesen.
  • Schwerkraft ist enthalten: Ruhewerte um ±9,81 m/s² sind normal und kein Messfehler. Für reine Bewegung LinearAccelerationSensor verwenden.
  • Datenschutz und Akku: Browser können die Frequenz und Genauigkeit drosseln (Schutz vor Fingerprinting und Seitenkanalangriffen). Hohe Frequenzen verbrauchen mehr Akku, daher nicht mehr benötigte Sensoren mit stop() beenden.
  • Die Achsenrichtung hängt von referenceFrame ab. Beim Drehen des Bildschirms ändert sich die Bedeutung von y nur, wenn 'screen' gesetzt ist.