Start · Sprachen · JavaScript · Referenz · LinearAccelerationSensor

LinearAccelerationSensor

Schnittstelle

Liefert die auf das Gerät wirkende Beschleunigung entlang der x-, y- und z-Achse in m/s², jedoch ohne den Anteil der Schwerkraft.

seit JavaScript Generic Sensor API — Chromium-Browser (Chrome/Edge Kategorie: webapi

Signatur

interface LinearAccelerationSensor extends Accelerometer

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

Typ
LinearAccelerationSensor
Beschreibung
Eine neue Sensor-Instanz. Sie liefert erst Daten, wenn 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.');
}
x: 0.02 | y: -0.01 | z: 0.03 m/s² (Gerät liegt still)

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();
Geschüttelt! Stärke: 21.4 m/s²

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();
z: 0.12

// 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 Ereignis devicemotion mit event.acceleration.
  • Sicherer Kontext: Der Sensor steht nur über HTTPS (oder localhost) zur Verfügung. In iframes muss die Permissions Policy accelerometer ausdrücklich freigegeben sein, zum Beispiel mit allow="accelerometer".
  • Fehler: Der Konstruktor kann einen SecurityError werfen, wenn die Policy den Zugriff blockiert. Umschließen Sie ihn deshalb mit try/catch. Wird der Zugriff zur Laufzeit verweigert oder fehlt die Hardware, meldet das error-Ereignis einen NotAllowedError bzw. NotReadableError.
  • Werte vor dem Start: Vor der ersten Ablesung sind x, y und z gleich null.
  • 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.