Signatur
Beschreibung
Der Konstruktor LinearAccelerationSensor() erzeugt einen Sensor der Generic Sensor API. Er misst die lineare Beschleunigung des Geräts in m/s² auf der x-, y- und z-Achse. Im Unterschied zum Accelerometer ist die Erdbeschleunigung (≈ 9,81 m/s²) bereits herausgerechnet. Liegt das Gerät ruhig auf dem Tisch, liefern also alle drei Achsen ungefähr 0.
Gedacht ist der Sensor für Anwendungen, die auf tatsächliche Bewegung reagieren sollen: Schüttel-Gesten, Schrittzähler, Bewegungssteuerung in Spielen oder das Erkennen von Stößen. Braucht man dagegen nur die Lage des Geräts im Raum, passt der GravitySensor oder der AbsoluteOrientationSensor besser.
Mit dem Konstruktor allein wird noch nicht gemessen. Erst sensor.start() startet die Messung. Neue Werte kommen über das Ereignis reading an und stehen dann in den Eigenschaften x, y, z und timestamp. Fehler, zum Beispiel eine verweigerte Berechtigung oder fehlende Hardware, meldet das Ereignis error. Man sollte es immer behandeln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $options | object | {} | Optionales Objekt zur Konfiguration des Sensors. |
| $options.frequency | number | Plattformabhängig | Gewünschte Anzahl Messungen pro Sekunde (Hz). Das ist nur ein Wunsch: Der Browser kann die Rate begrenzen, meist auf höchstens 60 Hz. |
| $options.referenceFrame | "device" | "screen" | "device" | Bezugssystem der Achsen. Bei "device" gelten die Achsen des physischen Geräts, bei "screen" die Achsen des Bildschirms, wie er gerade ausgerichtet ist (Hoch- oder Querformat). |
Rückgabewert
LinearAccelerationSensor-Objekt. Es erbt von Accelerometer, Sensor und EventTarget.Beispiele
Sensor erstellen und Werte auslesen
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üttel-Geste erkennen
const SCHWELLE = 15; // Beschleunigung in 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 = (event) => console.error(event.error.name);
sensor.start();
Berechtigung prüfen, Bildschirmachsen verwenden und Sensor stoppen
const starteSensor = async () => {
const results = await Promise.all([
navigator.permissions.query({ name: 'accelerometer' })
]);
if (results.some((r) => r.state === 'denied')) {
console.warn('Zugriff auf den Beschleunigungssensor verweigert.');
return null;
}
try {
const sensor = new LinearAccelerationSensor({ frequency: 20, referenceFrame: 'screen' });
sensor.addEventListener('activate', () => console.log('Sensor aktiv'));
sensor.start();
// Nach 5 Sekunden wieder stoppen, das spart Akku
setTimeout(() => {
sensor.stop();
console.log('Sensor gestoppt');
}, 5000);
return sensor;
} catch (error) {
// SecurityError (Permissions-Policy) oder ReferenceError (keine Unterstützung)
console.error(`Konstruktor fehlgeschlagen: ${error.name}`);
return null;
}
};
starteSensor();
// Wichtig · Fallstricke
- Browser-Unterstützung: Die API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet), vor allem auf Mobilgeräten. Firefox und Safari unterstützen sie nicht. Vor der Nutzung sollte man deshalb immer mit
'LinearAccelerationSensor' in windowprüfen, ob sie vorhanden ist. Als Ersatz dient dasdevicemotion-Ereignis mitacceleration. - Sicherer Kontext: Der Konstruktor funktioniert nur über HTTPS oder auf
localhost. - Berechtigungen: Nötig ist die Berechtigung
accelerometer. In iframes muss sie zusätzlich per Permissions-Policy freigegeben werden, etwa mitallow="accelerometer". Sonst wirft der Konstruktor einenSecurityError. - Fehler kommen oft erst später: Fehlende Hardware (
NotReadableError) oder eine verweigerte Berechtigung (NotAllowedError) melden sich meist erst nachstart()über das Ereigniserrorund nicht als Ausnahme im Konstruktor. Deshalb braucht man beides:try/catchund einenerror-Handler. - Kein Wert vor der ersten Messung: Vor dem ersten
reading-Ereignis sindx,yundznull. - Datenschutz und Akku: Bewegungsdaten können zum Fingerprinting oder zum Mitlesen von Tastatureingaben missbraucht werden. Browser senken deshalb die Frequenz oder pausieren den Sensor, wenn der Tab im Hintergrund liegt. Rufen Sie
stop()auf, sobald Sie keine Werte mehr brauchen.