Signatur
Beschreibung
LinearAccelerationSensor gehört zur Generic Sensor API und erbt von Accelerometer (und damit von Sensor und EventTarget). Die Eigenschaften x, y und z geben die Beschleunigung in Meter pro Sekunde zum Quadrat (m/s²) an. Anders als beim reinen Accelerometer ist die Erdbeschleunigung (ca. 9,81 m/s²) bereits herausgerechnet. Liegt das Gerät still auf dem Tisch, sind alle drei Werte daher ungefähr 0.
Der Sensor eignet sich immer dann, wenn Sie die Bewegung des Geräts messen möchten und nicht seine Lage: zum Beispiel für Schüttelgesten, Schrittzähler, Stoßerkennung oder Fitness- und Spiel-Anwendungen. Wenn Sie nur die Richtung der Schwerkraft brauchen (also die Neigung), nehmen Sie stattdessen GravitySensor.
Die Nutzung folgt dem üblichen Sensor-Ablauf: Instanz mit gewünschter frequency anlegen, auf die Ereignisse reading und error hören und dann start() aufrufen. Mit stop() schalten Sie den Sensor wieder ab und sparen so Akku. Der Zugriff setzt einen sicheren Kontext (HTTPS) voraus. Außerdem müssen die Berechtigung accelerometer und die Permissions Policy accelerometer erlaubt sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options | object | {} | Optionales Konfigurationsobjekt für den Konstruktor new LinearAccelerationSensor(options). |
| $options.frequency | number | gerätespezifisch | Gewünschte Anzahl der Ablesungen pro Sekunde (Hz). Der Browser kann den Wert nach oben begrenzen. |
| $options.referenceFrame | 'device' | 'screen' | 'device' | Bezugssystem der Achsen: 'device' nutzt die physischen Geräteachsen, 'screen' richtet die Achsen an der aktuellen Bildschirmausrichtung aus. |
Rückgabewert
start() aufgerufen wurde. Danach enthalten x, y und z (jeweils number | null) die lineare Beschleunigung in m/s², und timestamp gibt den Zeitpunkt der letzten Ablesung an.Beispiele
Sensor anlegen und Werte ausgeben
if ('LinearAccelerationSensor' in window) {
const sensor = new LinearAccelerationSensor({ frequency: 30 });
sensor.addEventListener('reading', () => {
console.log(`x: ${sensor.x.toFixed(2)} | y: ${sensor.y.toFixed(2)} | z: ${sensor.z.toFixed(2)} m/s²`);
});
sensor.addEventListener('error', (event) => {
console.error(`${event.error.name}: ${event.error.message}`);
});
sensor.start();
} else {
console.warn('LinearAccelerationSensor wird nicht unterstützt.');
}
Schüttelgeste erkennen
const SCHWELLE = 15; // m/s²
const SPERRZEIT = 1000; // ms zwischen zwei Gesten
let letzteGeste = 0;
const sensor = new LinearAccelerationSensor({ frequency: 60 });
sensor.onreading = () => {
const staerke = Math.hypot(sensor.x, sensor.y, sensor.z);
const jetzt = performance.now();
if (staerke > SCHWELLE && jetzt - letzteGeste > SPERRZEIT) {
letzteGeste = jetzt;
console.log(`Geschüttelt! Stärke: ${staerke.toFixed(1)} m/s²`);
}
};
sensor.onerror = (e) => console.error(e.error.name);
sensor.start();
Berechtigung prüfen und Sensor sauber beenden
const starteSensor = async () => {
const { state } = await navigator.permissions.query({ name: 'accelerometer' });
if (state === 'denied') {
console.warn('Zugriff auf Bewegungssensoren verweigert.');
return null;
}
const sensor = new LinearAccelerationSensor({ frequency: 20, referenceFrame: 'screen' });
sensor.onreading = () => console.log('z:', sensor.z);
sensor.start();
// Sensor anhalten, sobald der Tab im Hintergrund ist
document.addEventListener('visibilitychange', () => {
document.hidden ? sensor.stop() : sensor.start();
});
return sensor;
};
starteSensor();
// Wichtig · Fallstricke
- Browser-Kompatibilität: Der Sensor wird nur von Chromium-Browsern unterstützt (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari kennen ihn nicht. Prüfen Sie die Unterstützung immer mit
'LinearAccelerationSensor' in window. Als Ausweichlösung eignet sich das Ereignisdevicemotionmitevent.acceleration. - Sicherer Kontext: Der Sensor steht nur über HTTPS (oder
localhost) zur Verfügung. In iframes muss die Permissions Policyaccelerometerausdrücklich freigegeben sein, zum Beispiel mitallow="accelerometer". - Fehler: Der Konstruktor kann einen
SecurityErrorwerfen, wenn die Policy den Zugriff blockiert. Umschließen Sie ihn deshalb mittry/catch. Wird der Zugriff zur Laufzeit verweigert oder fehlt die Hardware, meldet daserror-Ereignis einenNotAllowedErrorbzw.NotReadableError. - Werte vor dem Start: Vor der ersten Ablesung sind
x,yundzgleichnull. - Messrauschen: Die Werte werden aus Beschleunigungssensor und Gyroskop zusammengerechnet (Sensorfusion) und schwanken daher leicht. Glätten Sie sie gegebenenfalls, etwa mit einem Tiefpassfilter.
- Leistung und Datenschutz: Hohe Frequenzen verbrauchen viel Akku. Rufen Sie
stop()auf, wenn Sie den Sensor nicht brauchen. Browser können die Frequenz begrenzen, weil sich Bewegungsdaten für Fingerprinting missbrauchen lassen.