In Chrome 50 sind Änderungen an der Geräteausrichtung verfügbar

Jan Posnick
Jeff Posnick

Entwickler, die an Virtual- oder Augmented-Reality-Webanwendungen arbeiten, sind mit DeviceOrientationEvent zweifellos vertraut. Nicht initiierte Nutzer erhalten mit This End Up: Using Device Orientation einen guten Überblick darüber, wie ein deviceorientation-Ereignis-Listener auf ein Drehen und Drehen des Geräts reagieren kann.

In früheren Versionen von Chrome wurden die Werte alpha, beta und gamma in DeviceOrientationEvent als absolute Grad in Bezug auf den Erdkoordinatenrahmen angegeben. Um absolute Grade bereitzustellen, muss der Magnetometer-Sensor des Geräts das Magnetfeld der Erde erkennen. Dieses ist wiederum anfällig für Schwankungen des Magnetfelds in der Nähe, die die Messwerte verfälschen könnten. In der Praxis könnte dies dazu führen, dass eine Webanwendung aufgrund eines in der Nähe befindlichen Magneten eine Reihe von DeviceOrientationEvents registriert, obwohl sich das Gerät selbst nicht tatsächlich bewegt. Für eine Virtual-Reality-Anwendung, die nur Ausrichtungsänderungen verfolgen möchte, ist dieses magnetische Rauschen schlechte Neuigkeiten.

Was ändert sich?

Ab Chrome 50 sind die Gradwerte im DeviceOrientationEvent standardmäßig nicht mehr absolut in Bezug auf den Erdkoordinatenrahmen. Das bedeutet, dass DeviceOrientationEvents nur ausgelöst werden sollten, wenn eine Bewegung aus Beschleunigungsmesser und Gyroskop eines Geräts erkannt wird. Das Magnetometer und falsche Messwerte aufgrund von Magnetfeldschwankungen sind nicht im Bild.

Aber ich brauche trotzdem absolute Grade!

Wenn Sie JavaScript-Code schreiben, der absolute Grade verwenden muss, zum Beispiel als Teil einer Augmented-Reality-Webanwendung, die direkt der physischen Welt zugeordnet werden muss, haben Sie keinen Pech. Die vorherige Funktionsweise, die vom Magnetometer eines Geräts abhängt, ist über ein neues deviceorientationabsolute-Ereignis verfügbar. Für Entwickler entspricht dies der vorhandenen DeviceOrientationEvent, wobei garantiert wird, dass das Attribut absolute auf true festgelegt wird.

Unterstützte Funktionen ermitteln

Entwickler, die absolute Grade bevorzugen, können mithilfe der Funktionserkennung feststellen, ob sie einen Browser verwenden, der das neue DeviceOrientationAbsoluteEvent-Ereignis unterstützt:

if ('ondeviceorientationabsolute' in window) {
    // We can listen for the new deviceorientationabsolute event.
} else if ('ondeviceorientation' in window) {
    // We can still listen for deviceorientation events.
    // The `absolute` property of the event tells us whether
    // or not the degrees are absolute.
}

Browserübergreifende Kompatibilität

Die im DeviceOrientationEvent gemeldeten Werte waren nie einheitlich.

Safari und Firefox unter iOS verwenden relative Werte für die Grade, die der in Chrome 50 eingeführten Implementierungsänderung entsprechen. Die Änderung sollte zu mehr Konsistenz bei Webanwendungen führen, die speziell für iOS geschrieben wurden.

Firefox (auf anderen Plattformen als iOS), Edge und Chrome-Versionen vor 50 verwenden absolute Gradwerte für DeviceOrientationEvent, wenn es auf Geräten mit den entsprechenden Sensoren ausgeführt wird.

Derzeit unterstützt Chrome 50 als erster Browser das neue DeviceOrientationAbsoluteEvent.

Erweitertes Tracking der Ausrichtung mit DeviceMotionEvent

Boris Smus bietet einen fantastisch detaillierten Artikel, in dem einige der Nachteile der Verwendung von DeviceOrientationEvent erläutert werden. Außerdem wird beschrieben, wie eine individuelle Sensorfusion mithilfe von DeviceMotionEvent implementiert wird. Sie bieten einfachen Zugriff auf den Beschleunigungsmesser und das Gyroskop und können Ihren Nutzern ein genaueres Virtual-Reality-Erlebnis ermöglichen.

Weitere Ressourcen