Geräteausrichtung und Bewegung

Mit Gerätebewegungs- und ‑orientierungsereignissen können Sie auf den integrierten Beschleunigungsmesser, das Gyroskop und den Kompass von Mobilgeräten zugreifen.

Diese Ereignisse können für viele Zwecke verwendet werden, z. B. in Spielen, um die Richtung oder Aktion einer Figur zu steuern. In Kombination mit der Standortbestimmung können sie dazu beitragen, genauere detaillierte Navigationsanweisungen zu erstellen oder Informationen zu einem bestimmten Ort bereitzustellen.

Zusammenfassung

  • Erkennt, welche Seite des Geräts oben ist und wie es gedreht wird.
  • Hier erfahren Sie, wann und wie Sie auf Bewegungs- und Orientierungsereignisse reagieren können.

Welches Ende ist oben?

Wenn Sie die Daten verwenden möchten, die von den Geräteausrichtungs- und Bewegungsereignissen zurückgegeben werden, ist es wichtig, die angegebenen Werte zu verstehen.

Erdkoordinatensystem

Der Erdkoordinatenrahmen, der durch die Werte X, Y und Z beschrieben wird, ist anhand der Schwerkraft und der Standardmagnetfeldorientierung ausgerichtet.

Koordinatensystem
X Stellt die Ost-West-Richtung dar (wobei Ost positiv ist).
Y Stellt die Nord-Süd-Richtung dar (wobei Norden positiv ist).
Z Stellt die Auf-/Ab-Richtung dar, senkrecht zum Boden (wobei „oben“ positiv ist).

Gerätekoordinatensystem

Abbildung des Gerätekoordinatensystems
Darstellung des Gerätekoordinatenframes

Der Gerätekoordinatenrahmen, der durch die Werte x, y und z beschrieben wird, ist anhand der Mitte des Geräts ausgerichtet.

Koordinatensystem
X In der Ebene des Bildschirms, positiv nach rechts.
Y In der Ebene des Bildschirms, positiv nach oben.
Z Senkrecht zum Bildschirm oder zur Tastatur, positiv nach außen gerichtet.

Auf einem Smartphone oder Tablet richtet sich die Geräteausrichtung nach der üblichen Ausrichtung des Displays. Bei Smartphones und Tablets muss das Gerät im Hochformat gehalten werden. Bei Computern oder Laptops wird die Ausrichtung in Bezug auf die Tastatur berücksichtigt.

Rotationsdaten

Die Drehungsdaten werden als Eulerwinkel zurückgegeben, der die Anzahl der Grad der Differenz zwischen dem Gerätekoordinatensystem und dem Erdkoordinatensystem darstellt.

Alpha

Abbildung von Alpha im Gerätekoordinatensystem
Abbildung von Alpha im Gerätekoordinatensystem

Die Drehung um die Z‑Achse. Der Wert für alpha ist 0°, wenn die Oberseite des Geräts genau nach Norden zeigt. Wenn das Gerät gegen den Uhrzeigersinn gedreht wird, steigt der Wert von alpha.

Beta

Abbildung des Gerätekoordinatensystems
Abbildung von Beta im Gerätekoordinatensystem

Die Drehung um die X-Achse. Der Wert für beta ist 0°, wenn sich die Ober- und Unterseite des Geräts gleich weit von der Erdoberfläche entfernt befinden. Der Wert steigt, wenn die Oberseite des Geräts zur Erdoberfläche geneigt wird.

Gamma

Abbildung des Gerätekoordinatensystems
Darstellung von Gamma im Gerätekoordinatensystem

Die Drehung um die y-Achse. Der Wert von gamma ist 0°, wenn die linken und rechten Ränder des Geräts gleich weit von der Erdoberfläche entfernt sind. Der Wert steigt, wenn die rechte Seite zur Erdoberfläche geneigt ist.

Ausrichtung des Geräts

Das Ereignis „deviceOrientation“ gibt Drehungsdaten zurück, darunter, wie stark das Gerät nach vorne oder hinten und zur Seite geneigt ist. Wenn das Smartphone oder der Laptop einen Kompass hat, wird auch die Richtung angegeben, in die das Gerät zeigt.

Verwenden Sie sie sparsam. Testen Sie den Support. Aktualisieren Sie die Benutzeroberfläche nicht bei jedem Ausrichtungsereignis, sondern synchronisieren Sie sie mit requestAnimationFrame.

Wann sollten Ereignisse zur Geräteausrichtung verwendet werden?

Es gibt mehrere Anwendungsfälle für Ereignisse zur Geräteausrichtung. Beispiele:

  • Eine Karte wird aktualisiert, während sich der Nutzer bewegt.
  • Subtile Änderungen an der Benutzeroberfläche, z. B. das Hinzufügen von Parallaxeneffekten.
  • In Kombination mit der Standortbestimmung kann es für die detaillierte Routenführung verwendet werden.

Support prüfen und auf Ereignisse warten

Wenn Sie auf DeviceOrientationEvent warten möchten, prüfen Sie zuerst, ob der Browser die Ereignisse unterstützt. Fügen Sie dem window-Objekt dann einen Event-Listener hinzu, der auf deviceorientation-Ereignisse wartet.

if (window.DeviceOrientationEvent) {
  window
.addEventListener('deviceorientation', deviceOrientationHandler, false);
  document
.getElementById('doeSupported').innerText = 'Supported!';
}

Geräteausrichtungsereignisse verarbeiten

Das Ereignis „deviceOrientation“ wird ausgelöst, wenn sich das Gerät bewegt oder die Ausrichtung ändert. Es gibt Daten zur Differenz zwischen dem Gerät an seiner aktuellen Position in Bezug auf den Erdkoordinatenrahmen zurück.

Das Ereignis gibt in der Regel drei Properties zurück: alpha, beta und gamma. In der mobilen Safari-Version wird mit dem Kompass-Steuersatz ein zusätzlicher Parameter webkitCompassHeading zurückgegeben.

Gerätebewegung

Das Ereignis „deviceOrientation“ gibt Drehungsdaten zurück, darunter, wie stark das Gerät nach vorne oder hinten geneigt ist, wie stark es nach links oder rechts geneigt ist und, sofern das Smartphone oder der Laptop einen Kompass hat, in welche Richtung das Gerät zeigt.

Verwenden Sie die Gerätebewegung, wenn die aktuelle Bewegung des Geräts benötigt wird. rotationRate wird in °/s angegeben. acceleration und accelerationWithGravity werden in m/s2 angegeben. Beachten Sie die Unterschiede zwischen Browserimplementierungen.

Wann sollten Ereignisse für Gerätebewegungen verwendet werden?

Es gibt mehrere Anwendungsfälle für Gerätebewegungsereignisse. Beispiele:

  • Daten durch Schütteln aktualisieren
  • In Spielen, um Charaktere zum Springen oder Bewegen zu bewegen.
  • Für Gesundheits- und Fitness-Apps

Support prüfen und auf Ereignisse warten

Wenn Sie auf DeviceMotionEvent warten möchten, prüfen Sie zuerst, ob die Ereignisse im Browser unterstützt werden. Fügen Sie dem window-Objekt dann einen Event-Listener hinzu, der auf devicemotion-Ereignisse wartet.

if (window.DeviceMotionEvent) {
  window
.addEventListener('devicemotion', deviceMotionHandler);
  setTimeout
(stopJump, 3 * 1000);
}

Gerätebewegungsereignisse verarbeiten

Das Ereignis „Gerätebewegung“ wird in regelmäßigen Intervallen ausgelöst und gibt Daten zur Drehung (in °/Sekunde) und Beschleunigung (in m/Sekunde2) des Geräts in diesem Moment zurück. Einige Geräte haben nicht die Hardware, um die Auswirkungen der Schwerkraft zu berücksichtigen.

Das Ereignis gibt vier Eigenschaften zurück: accelerationIncludingGravity, acceleration (ohne Gravitationseffekte), rotationRate und interval.

Sehen wir uns beispielsweise ein Smartphone an, das auf einem flachen Tisch liegt und dessen Display nach oben zeigt.

Status Rotation Beschleunigung (m/s2) Beschleunigung durch die Schwerkraft (m/s2)
Nicht bewegt [0, 0, 0] [0, 0, 0] [0, 0, 9.8]
Nach oben in Richtung Himmel [0, 0, 0] [0, 0, 5] [0, 0, 14.81]
Nur nach rechts bewegen [0, 0, 0] [3, 0, 0] [3, 0, 9.81]
Nach oben und rechts verschoben [0, 0, 0] [5, 0, 5] [5, 0, 14.81]

Wenn das Smartphone hingegen so gehalten wird, dass das Display senkrecht zum Boden und direkt für den Betrachter sichtbar ist, gilt Folgendes:

Status Rotation Beschleunigung (m/s2) Beschleunigung durch die Schwerkraft (m/s2)
Nicht bewegt [0, 0, 0] [0, 0, 0] [0, 9.81, 0]
Nach oben in Richtung Himmel [0, 0, 0] [0, 5, 0] [0, 14.81, 0]
Nur nach rechts bewegen [0, 0, 0] [3, 0, 0] [3, 9.81, 0]
Nach oben und rechts verschoben [0, 0, 0] [5, 5, 0] [5, 14.81, 0]

Beispiel: Maximale Beschleunigung eines Objekts berechnen

Eine Möglichkeit, Gerätebewegungsereignisse zu verwenden, besteht darin, die maximale Beschleunigung eines Objekts zu berechnen. Wie hoch ist beispielsweise die maximale Beschleunigung einer springenden Person?

if (evt.acceleration.x > jumpMax.x) {
  jumpMax
.x = evt.acceleration.x;
}
if (evt.acceleration.y > jumpMax.y) {
  jumpMax
.y = evt.acceleration.y;
}
if (evt.acceleration.z > jumpMax.z) {
  jumpMax
.z = evt.acceleration.z;
}

Nachdem der Nutzer auf die Schaltfläche „Los!“ getippt hat, wird er aufgefordert, zu springen. Während dieser Zeit speichert die Seite die maximalen (und minimalen) Beschleunigungswerte und teilt dem Nutzer nach dem Sprung seine maximale Beschleunigung mit.

Feedback