Start · Sprachen · JavaScript · Referenz · DeviceMotionEvent.interval

DeviceMotionEvent.interval

Eigenschaft

Schreibgeschützte Eigenschaft, die den Abstand in Millisekunden angibt, in dem das Gerät neue Bewegungsdaten von seiner Sensorhardware liefert.

seit JavaScript Baseline: alle modernen Browser (sicherer Kontext, Kategorie: webapi

Signatur

DeviceMotionEvent.interval

Beschreibung

Die Eigenschaft interval eines DeviceMotionEvent gibt an, wie viele Millisekunden zwischen zwei Messungen des Beschleunigungs- und Gyroskopsensors liegen. Der Wert ist eine Gleitkommazahl (double) und bleibt bei einem Gerät meistens gleich, zum Beispiel etwa 16 (rund 60 Hz) oder 100 (10 Hz).

Gebraucht wird der Wert vor allem bei numerischen Berechnungen über die Zeit: Wenn Sie die Beschleunigung (acceleration) aufaddieren, um eine Geschwindigkeit abzuschätzen, oder die Drehrate (rotationRate, in Grad pro Sekunde) aufaddieren, um einen Drehwinkel zu berechnen, brauchen Sie den Zeitschritt Δt. Genau diesen Zeitschritt liefert interval, umgerechnet in Sekunden (interval / 1000).

Außerdem können Sie mit dem Wert die Rechenlast in Ihrem Event-Handler planen. Bei einem kleinen Intervall wird der Handler sehr oft aufgerufen. Aufwendige DOM-Änderungen sollten Sie dann bündeln, etwa mit requestAnimationFrame().

Die Eigenschaft kann nur gelesen werden. Die Abtastrate lässt sich darüber nicht einstellen, denn sie wird vom Browser und von der Hardware vorgegeben.

Rückgabewert

Typ
number
Beschreibung
Abstand zwischen zwei Sensormessungen in Millisekunden, als Gleitkommazahl. Bei selbst erzeugten Events ohne entsprechende Angabe ist der Wert 0.

Beispiele

Abtastrate des Geräts ermitteln

const onMotion = (event) => {
  const ms = event.interval;
  const hz = ms > 0 ? (1000 / ms).toFixed(1) : 'unbekannt';
  console.log(`Intervall: ${ms} ms (≈ ${hz} Hz)`);
  // Einmal reicht – danach den Listener entfernen
  window.removeEventListener('devicemotion', onMotion);
};

window.addEventListener('devicemotion', onMotion);
Intervall: 16 ms (≈ 62.5 Hz)

Drehwinkel aus der Drehrate aufaddieren

let angleAlpha = 0; // Drehung um die z-Achse in Grad

window.addEventListener('devicemotion', (event) => {
  const rate = event.rotationRate;
  if (!rate || rate.alpha == null) return;

  const dt = event.interval / 1000; // ms → s
  angleAlpha = (angleAlpha + rate.alpha * dt) % 360;

  document.querySelector('#angle').textContent = `${angleAlpha.toFixed(1)}°`;
});

Berechtigung unter iOS anfragen und dann auswerten

const startMotion = async () => {
  // Safari auf iOS 13+ verlangt eine ausdrückliche Erlaubnis
  if (typeof DeviceMotionEvent?.requestPermission === 'function') {
    const state = await DeviceMotionEvent.requestPermission();
    if (state !== 'granted') {
      console.warn('Bewegungssensoren abgelehnt');
      return;
    }
  }

  window.ondevicemotion = (event) => {
    console.log('Neue Messung alle', event.interval, 'ms');
    window.ondevicemotion = null; // Handler wieder abmelden
  };
};

// requestPermission darf nur nach einer Nutzeraktion aufgerufen werden
document.querySelector('#start').addEventListener('click', startMotion);
Neue Messung alle 16.666 ms

Selbst erzeugtes Event (z. B. für Tests)

const fake = new DeviceMotionEvent('devicemotion', {
  acceleration: { x: 0, y: 0, z: 9.81 },
  interval: 20
});

console.log(fake.interval);
console.log(new DeviceMotionEvent('devicemotion').interval);
20 0

// Wichtig · Fallstricke

  • Einheit: Der Wert wird in Millisekunden angegeben, rotationRate dagegen in Grad pro Sekunde. Rechnen Sie ihn deshalb vor dem Multiplizieren mit / 1000 in Sekunden um. Die Umrechnung zu vergessen, ist ein häufiger Fehler.
  • Nominalwert, nicht gemessen: interval gibt die vorgesehene Rate an. Die tatsächlichen Abstände zwischen den Events können schwanken, zum Beispiel wenn das System stark ausgelastet ist oder der Tab im Hintergrund läuft. Für genaue Berechnungen messen Sie den Abstand zusätzlich über event.timeStamp oder performance.now().
  • Einheit bei alten Browsern: Ältere Chrome-Versionen haben den Wert zeitweise in Sekunden statt in Millisekunden geliefert. Ein Wert unter 1 weist auf dieses alte Verhalten hin.
  • Sicherheit und Datenschutz: Das Event wird nur in sicheren Kontexten (HTTPS) ausgelöst. Es kann außerdem durch eine Permissions Policy (accelerometer, gyroscope) gesperrt sein. Unter iOS ist DeviceMotionEvent.requestPermission() nach einer Nutzeraktion nötig. In iframes kann das Event blockiert sein.
  • Desktop-Geräte ohne Sensoren lösen das Event oft gar nicht aus. Manche lösen es einmal aus, mit Sensordaten gleich null.