Start · Sprachen · JavaScript · Referenz · new LinearAccelerationSensor()

new LinearAccelerationSensor()

Methode

Erstellt ein <code>LinearAccelerationSensor</code>-Objekt, das die Beschleunigung des Geräts auf allen drei Achsen misst, ohne den Anteil der Erdanziehung.

seit JavaScript Generic Sensor API — Chromium 67+ (Chrome, Edge, O Kategorie: webapi

Signatur

new LinearAccelerationSensor(options)

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

Typ
LinearAccelerationSensor
Beschreibung
Ein neues, noch nicht gestartetes 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.');
}
x: 0.02 y: -0.01 z: 0.05 m/s² (Gerät liegt ruhig; weitere Zeilen folgen bei jeder Messung)

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

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();
Sensor aktiv Sensor gestoppt

// 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 window prüfen, ob sie vorhanden ist. Als Ersatz dient das devicemotion-Ereignis mit acceleration.
  • 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 mit allow="accelerometer". Sonst wirft der Konstruktor einen SecurityError.
  • Fehler kommen oft erst später: Fehlende Hardware (NotReadableError) oder eine verweigerte Berechtigung (NotAllowedError) melden sich meist erst nach start() über das Ereignis error und nicht als Ausnahme im Konstruktor. Deshalb braucht man beides: try/catch und einen error-Handler.
  • Kein Wert vor der ersten Messung: Vor dem ersten reading-Ereignis sind x, y und z null.
  • 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.