Signatur
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
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.');
}
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();
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);
// 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
devicemotionmitevent.accelerationIncludingGravity.yverwenden. - Sicherer Kontext: Funktioniert nur über HTTPS (oder localhost). In iframes muss die Permissions Policy
accelerometererlaubt sein, sonst tritt einSecurityErrorauf. nullvor der ersten Messung: Direkt nachstart()istynochnull. Den Wert deshalb immer imreading-Handler lesen.- Schwerkraft ist enthalten: Ruhewerte um ±9,81 m/s² sind normal und kein Messfehler. Für reine Bewegung
LinearAccelerationSensorverwenden. - 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
referenceFrameab. Beim Drehen des Bildschirms ändert sich die Bedeutung vonynur, wenn'screen'gesetzt ist.