Signatur
Beschreibung
Die Eigenschaft z einer Accelerometer-Instanz enthält den zuletzt gemessenen Beschleunigungswert entlang der z-Achse des Geräts in Metern pro Sekunde zum Quadrat (m/s²). Die z-Achse steht senkrecht zum Bildschirm. Positive Werte zeigen aus dem Display heraus zum Betrachter hin.
Beim normalen Accelerometer ist die Erdbeschleunigung mitgerechnet. Liegt ein Smartphone flach mit dem Display nach oben auf dem Tisch, liefert z also etwa 9.81, liegt es mit dem Display nach unten, etwa -9.81. Wenn du nur die Bewegung ohne Schwerkraft brauchst, nimm LinearAccelerationSensor. Wenn du nur den Schwerkraftanteil brauchst, nimm GravitySensor.
Der Wert ist null, bis der Sensor mit start() gestartet wurde und die erste Messung vorliegt. Du liest z deshalb am besten im reading-Event aus. Typische Anwendungen sind die Erkennung der Geräteausrichtung (Display oben oder unten), Schüttel- und Stoßerkennung sowie die Steuerung von Spielen.
Welches Bezugssystem gilt, legt die Konstruktor-Option referenceFrame fest: "device" (Standard) bezieht sich auf das Gerät selbst, "screen" auf die aktuelle Bildschirmausrichtung.
Rückgabewert
null, solange keine Messung vorliegt.Beispiele
z-Wert bei jeder Messung ausgeben
if ('Accelerometer' in window) {
const sensor = new Accelerometer({ frequency: 10 });
sensor.addEventListener('reading', () => {
console.log(`z: ${sensor.z.toFixed(2)} m/s²`);
});
sensor.addEventListener('error', (event) => {
console.error('Sensorfehler:', event.error.name, event.error.message);
});
sensor.start();
} else {
console.warn('Accelerometer wird nicht unterstützt.');
}
Erkennen, ob das Display nach oben oder unten zeigt
const sensor = new Accelerometer({ frequency: 5 });
let lastState = null;
sensor.addEventListener('reading', () => {
const z = sensor.z;
const state = z > 7 ? 'Display oben' : z < -7 ? 'Display unten' : 'aufrecht/geneigt';
if (state !== lastState) {
lastState = state;
console.log(state);
// z. B. Wiedergabe stummschalten, wenn das Gerät umgedreht wird
}
});
sensor.start();
Berechtigung prüfen und Stöße auf der z-Achse erkennen
const startShockDetection = 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: 60 });
let previousZ = null;
sensor.addEventListener('reading', () => {
if (previousZ !== null && Math.abs(sensor.z - previousZ) > 12) {
console.log('Stoß erkannt! Δz =', (sensor.z - previousZ).toFixed(1));
}
previousZ = sensor.z;
});
sensor.start();
// Nach 30 Sekunden stoppen, um Akku zu sparen
setTimeout(() => sensor.stop(), 30_000);
};
startShockDetection();
// Wichtig · Fallstricke
- Browserunterstützung: Die Generic Sensor API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen sie nicht. Prüfe deshalb immer mit
'Accelerometer' in window. Als Rückfallebene eignet sich dasdevicemotion-Event (DeviceMotionEvent.accelerationIncludingGravity.z). - Sicherer Kontext: Die API funktioniert nur über HTTPS (oder
localhost). Sie kann außerdem per Permissions-Policy (accelerometer) gesperrt sein, etwa in iframes. In diesem Fall wirft der Konstruktor einenSecurityError. - Wert ist anfangs
null: Vor dem erstenreading-Event liefertzden Wertnull. Rechnest du damit, ohne das zu prüfen, entstehtNaN. - Schwerkraft inklusive: In Ruhe liefert
zje nach Lage etwa ±9,81 m/s² und nicht 0. Für reine Bewegung nimmLinearAccelerationSensor. - Datenschutz und Akku: Hohe Abtastraten verbrauchen Akku, und Bewegungsdaten eignen sich zum Fingerprinting. Browser können deshalb die Frequenz drosseln oder die Genauigkeit verringern. Stoppe den Sensor mit
stop(), sobald du ihn nicht mehr brauchst.