Start · Sprachen · JavaScript · Referenz · Accelerometer.x

Accelerometer.x

Eigenschaft

Schreibgeschützte Zahl mit der aktuellen Beschleunigung des Geräts entlang seiner x-Achse in m/s² (inklusive Erdbeschleunigung).

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

Signatur

Accelerometer.x

Beschreibung

Die schreibgeschützte Eigenschaft x eines Accelerometer-Objekts liefert die zuletzt gemessene Beschleunigung entlang der x-Achse des Geräts in Metern pro Sekunde zum Quadrat (m/s²). Bei einem Smartphone im Hochformat verläuft die x-Achse horizontal von links nach rechts über das Display. Ein positiver Wert bedeutet eine Beschleunigung nach rechts.

Der Wert enthält die Erdbeschleunigung (ca. 9,81 m/s²). Liegt das Gerät flach auf dem Tisch, ist x ungefähr 0. Kippt man es seitlich, geht ein Teil der Schwerkraft auf die x-Achse über. Deshalb eignet sich x gut, um die Neigung zu erkennen, etwa für Wasserwaagen, Steuerung durch Kippen in Spielen oder Schüttelgesten. Wer nur die Bewegung des Nutzers ohne Schwerkraft braucht, nimmt LinearAccelerationSensor. Für die reine Schwerkraft gibt es GravitySensor.

Solange der Sensor nicht mit start() gestartet wurde oder noch keine Messung vorliegt, ist x null. Neue Werte liest man am besten im reading-Event. Das Achsensystem folgt standardmäßig dem Gerät. Mit der Konstruktoroption referenceFrame: "screen" richtet es sich stattdessen nach der aktuellen Bildschirmausrichtung.

Rückgabewert

Typ
number | null
Beschreibung
Beschleunigung entlang der x-Achse in m/s² als Gleitkommazahl oder null, wenn noch keine Messung vorliegt.

Beispiele

x-Beschleunigung fortlaufend auslesen

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

  sensor.addEventListener('reading', () => {
    console.log(`x: ${sensor.x.toFixed(2)} m/s²`);
  });

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

  console.log('Vor dem Start:', sensor.x); // null
  sensor.start();
} else {
  console.warn('Accelerometer wird nicht unterstützt.');
}
Vor dem Start: null x: 0.12 m/s² x: -3.45 m/s² ...

Seitliche Neigung für eine Kippsteuerung

const ball = document.querySelector('#ball');
let position = window.innerWidth / 2;

const sensor = new Accelerometer({ frequency: 60, referenceFrame: 'screen' });

sensor.onreading = () => {
  // Kippt man nach rechts, wird x negativ, weil die Schwerkraft nach links zieht
  position -= sensor.x * 2;
  position = Math.max(0, Math.min(window.innerWidth - 40, position));
  ball.style.transform = `translateX(${position}px)`;
};

sensor.start();

Schüttelgeste über die x-Achse erkennen

const startShakeDetection = async (onShake) => {
  const { state } = await navigator.permissions.query({ name: 'accelerometer' });
  if (state === 'denied') {
    console.warn('Zugriff auf den Beschleunigungssensor verweigert.');
    return;
  }

  const sensor = new Accelerometer({ frequency: 50 });
  let lastX = null;
  const threshold = 15; // m/s² Differenz zwischen zwei Messungen

  sensor.addEventListener('reading', () => {
    if (lastX !== null && Math.abs(sensor.x - lastX) > threshold) {
      onShake();
    }
    lastX = sensor.x;
  });

  sensor.start();
  return () => sensor.stop();
};

const stop = await startShakeDetection(() => console.log('Geschüttelt!'));
Geschüttelt!

// Wichtig · Fallstricke

  • Browserunterstützung: Die Eigenschaft ist nur in Chromium-basierten Browsern verfügbar (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen die Generic Sensor API nicht. Als Ausweichlösung dient das devicemotion-Event mit event.accelerationIncludingGravity.x. Vorher sollte man die Unterstützung mit 'Accelerometer' in window prüfen.
  • Sicherer Kontext: Der Sensor funktioniert nur über HTTPS und nur, wenn die Permissions-Policy accelerometer ihn erlaubt. In iframes muss er mit allow="accelerometer" freigegeben werden.
  • null-Werte: Vor dem ersten reading-Event und nach stop() ist x null. Rechnungen wie sensor.x.toFixed() lösen dann einen TypeError aus.
  • Schwerkraft ist enthalten: Zur Bewegungserkennung ohne Schwerkraft eignet sich LinearAccelerationSensor besser.
  • Datenschutz und Genauigkeit: Browser können Frequenz und Genauigkeit der Messwerte drosseln, um Fingerprinting und Seitenkanalangriffe (z. B. das Mitlesen von Tastatureingaben) zu verhindern. In Hintergrund-Tabs werden keine Messwerte geliefert.
  • Akku: Hohe Frequenzen verbrauchen Energie. Den Sensor mit stop() beenden, wenn er nicht mehr gebraucht wird.