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

new Accelerometer()

Methode

Erzeugt ein neues <code>Accelerometer</code>-Objekt, das die Beschleunigung des Geräts entlang der X-, Y- und Z-Achse in m/s² misst.

seit JavaScript Generic Sensor API – Chromium-basierte Browser (Ch Kategorie: webapi

Signatur

new Accelerometer(options)

Beschreibung

Der Konstruktor Accelerometer() gehört zur Generic Sensor API und erzeugt einen Sensor, der die Beschleunigung des Geräts auf allen drei Achsen misst – einschließlich der Erdbeschleunigung. Ein ruhig auf dem Tisch liegendes Smartphone meldet daher auf der Z-Achse etwa 9,81 m/s². Wer nur die vom Nutzer verursachte Bewegung braucht, nimmt LinearAccelerationSensor, wer nur die Schwerkraft braucht, GravitySensor.

Nach dem Anlegen misst der Sensor noch nichts. Erst ein Aufruf von start() startet die Messung. Neue Werte kommen über das Ereignis reading an und stehen dann in den Eigenschaften x, y und z bereit. Fehler wie eine verweigerte Berechtigung oder fehlende Hardware meldet das Ereignis error. Mit stop() beendet man die Messung wieder und schont so den Akku.

Typische Einsatzfälle sind Schüttelgesten, Schrittzähler, Steuerung von Spielen über Neigen des Geräts oder Wasserwaagen-Apps. Über das Options-Objekt legt man die Abtastrate (frequency) und das Bezugskoordinatensystem (referenceFrame) fest.

Parameter

Name Typ Default Beschreibung
$options object {} Optionales Konfigurationsobjekt für den Sensor.
$options.frequency number abhängig von der Implementierung Gewünschte Anzahl an Messungen pro Sekunde (Hz). Der Browser kann den Wert nach oben begrenzen, in Chrome in der Regel auf 60 Hz.
$options.referenceFrame 'device' | 'screen' 'device' Bezugssystem der Achsen: 'device' folgt dem physischen Gerät, 'screen' der aktuellen Bildschirmausrichtung.

Rückgabewert

Typ
Accelerometer
Beschreibung
Ein neues, noch nicht gestartetes Accelerometer-Objekt (erbt von Sensor und damit von EventTarget).

Beispiele

Beschleunigung auslesen

if ('Accelerometer' in window) {
  const sensor = new Accelerometer({ frequency: 10 });

  sensor.addEventListener('reading', () => {
    console.log(`x: ${sensor.x.toFixed(2)}, y: ${sensor.y.toFixed(2)}, z: ${sensor.z.toFixed(2)}`);
  });

  sensor.addEventListener('error', (event) => {
    console.error(event.error.name, event.error.message);
  });

  sensor.start();
} else {
  console.warn('Accelerometer wird nicht unterstützt');
}
x: 0.12, y: 0.05, z: 9.79

Berechtigung vor dem Start prüfen

const startAccelerometer = async () => {
  const { state } = await navigator.permissions.query({ name: 'accelerometer' });
  if (state === 'denied') {
    console.warn('Zugriff auf den Beschleunigungssensor verweigert');
    return null;
  }
  const sensor = new Accelerometer({ frequency: 30, referenceFrame: 'screen' });
  sensor.start();
  return sensor;
};

startAccelerometer().then((s) => s && console.log('Sensor aktiv:', s.activated));
Sensor aktiv: false (wird nach dem 'activate'-Ereignis true)

Schüttelgeste erkennen

const THRESHOLD = 25; // m/s²
const sensor = new Accelerometer({ frequency: 60 });
let lastShake = 0;

sensor.onreading = () => {
  const { x, y, z } = sensor;
  const magnitude = Math.hypot(x, y, z);
  const now = performance.now();
  if (magnitude > THRESHOLD && now - lastShake > 1000) {
    lastShake = now;
    console.log('Gerät wurde geschüttelt!');
  }
};

sensor.onerror = (e) => console.error(e.error);
sensor.start();

// Beim Verlassen der Seite Sensor stoppen
document.addEventListener('visibilitychange', () => {
  document.hidden ? sensor.stop() : sensor.start();
});
Gerät wurde geschüttelt!

// Wichtig · Fallstricke

  • Browser-Unterstützung: nur Chromium-basierte Browser (Chrome, Edge, Opera, Samsung Internet), vor allem auf Mobilgeräten. Firefox und Safari unterstützen die API nicht – vorher immer mit 'Accelerometer' in window prüfen. Als Ausweichlösung dient das Ereignis devicemotion.
  • Sicherer Kontext: nur über HTTPS (oder localhost) verfügbar. In iframes muss die Permissions Policy accelerometer freigegeben sein.
  • Der Konstruktor kann SecurityError werfen, wenn die Policy den Zugriff verbietet, und ReferenceError, wenn die API fehlt. Deshalb in try/catch einpacken.
  • Fehlende Hardware oder eine verweigerte Berechtigung werfen keine Ausnahme, sondern kommen asynchron über das error-Ereignis (NotReadableError, NotAllowedError).
  • Vor dem ersten reading-Ereignis sind x, y und z gleich null.
  • Datenschutz/Akku: Bewegungsdaten lassen sich für Fingerprinting und das Ausspähen von Tastatureingaben missbrauchen. Deshalb begrenzen Browser die Frequenz und pausieren Sensoren in Hintergrund-Tabs. Nicht benötigte Sensoren mit stop() beenden.