Start · Sprachen · JavaScript · Referenz · Accelerometer.z

Accelerometer.z

Eigenschaft

Schreibgeschützte Eigenschaft, die die zuletzt gemessene Beschleunigung des Geräts entlang seiner z-Achse in m/s² als <code>number</code> liefert.

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

Signatur

Accelerometer.z

Beschreibung

Die Eigenschaft z einer Accelerometer-Instanz enthält den zuletzt gemessenen Beschleunigungswert entlang der z-Achse des Geräts in Metern pro Sekunde zum Quadrat (m/s²). Die z-Achse steht senkrecht zum Bildschirm. Positive Werte zeigen aus dem Display heraus zum Betrachter hin.

Beim normalen Accelerometer ist die Erdbeschleunigung mitgerechnet. Liegt ein Smartphone flach mit dem Display nach oben auf dem Tisch, liefert z also etwa 9.81, liegt es mit dem Display nach unten, etwa -9.81. Wenn du nur die Bewegung ohne Schwerkraft brauchst, nimm LinearAccelerationSensor. Wenn du nur den Schwerkraftanteil brauchst, nimm GravitySensor.

Der Wert ist null, bis der Sensor mit start() gestartet wurde und die erste Messung vorliegt. Du liest z deshalb am besten im reading-Event aus. Typische Anwendungen sind die Erkennung der Geräteausrichtung (Display oben oder unten), Schüttel- und Stoßerkennung sowie die Steuerung von Spielen.

Welches Bezugssystem gilt, legt die Konstruktor-Option referenceFrame fest: "device" (Standard) bezieht sich auf das Gerät selbst, "screen" auf die aktuelle Bildschirmausrichtung.

Rückgabewert

Typ
number | null
Beschreibung
Beschleunigung entlang der z-Achse in m/s² (Schwerkraft inklusive). null, solange keine Messung vorliegt.

Beispiele

z-Wert bei jeder Messung ausgeben

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

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

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

  sensor.start();
} else {
  console.warn('Accelerometer wird nicht unterstützt.');
}
z: 9.79 m/s² z: 9.81 m/s²

Erkennen, ob das Display nach oben oder unten zeigt

const sensor = new Accelerometer({ frequency: 5 });
let lastState = null;

sensor.addEventListener('reading', () => {
  const z = sensor.z;
  const state = z > 7 ? 'Display oben' : z < -7 ? 'Display unten' : 'aufrecht/geneigt';
  if (state !== lastState) {
    lastState = state;
    console.log(state);
    // z. B. Wiedergabe stummschalten, wenn das Gerät umgedreht wird
  }
});

sensor.start();
Display oben Display unten

Berechtigung prüfen und Stöße auf der z-Achse erkennen

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

  const sensor = new Accelerometer({ frequency: 60 });
  let previousZ = null;

  sensor.addEventListener('reading', () => {
    if (previousZ !== null && Math.abs(sensor.z - previousZ) > 12) {
      console.log('Stoß erkannt! Δz =', (sensor.z - previousZ).toFixed(1));
    }
    previousZ = sensor.z;
  });

  sensor.start();
  // Nach 30 Sekunden stoppen, um Akku zu sparen
  setTimeout(() => sensor.stop(), 30_000);
};

startShockDetection();
Stoß erkannt! Δz = 14.3

// Wichtig · Fallstricke

  • Browserunterstützung: Die Generic Sensor API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen sie nicht. Prüfe deshalb immer mit 'Accelerometer' in window. Als Rückfallebene eignet sich das devicemotion-Event (DeviceMotionEvent.accelerationIncludingGravity.z).
  • Sicherer Kontext: Die API funktioniert nur über HTTPS (oder localhost). Sie kann außerdem per Permissions-Policy (accelerometer) gesperrt sein, etwa in iframes. In diesem Fall wirft der Konstruktor einen SecurityError.
  • Wert ist anfangs null: Vor dem ersten reading-Event liefert z den Wert null. Rechnest du damit, ohne das zu prüfen, entsteht NaN.
  • Schwerkraft inklusive: In Ruhe liefert z je nach Lage etwa ±9,81 m/s² und nicht 0. Für reine Bewegung nimm LinearAccelerationSensor.
  • Datenschutz und Akku: Hohe Abtastraten verbrauchen Akku, und Bewegungsdaten eignen sich zum Fingerprinting. Browser können deshalb die Frequenz drosseln oder die Genauigkeit verringern. Stoppe den Sensor mit stop(), sobald du ihn nicht mehr brauchst.