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

Entwickler, die an Webanwendungen für virtuelle oder erweiterte Realität arbeiten, sind mit der DeviceOrientationEvent zweifellos vertraut. Für Einsteiger bietet Dieser Ausgang nach oben: Geräteausrichtung verwenden einen guten Überblick darüber, wie ein deviceorientation-Ereignis-Listener auf das Drehen und Neigen eines Geräts reagieren kann.

In früheren Versionen von Chrome wurden die Werte alpha, beta und gamma in DeviceOrientationEvent in absolute-Grad im Bezug auf das Koordinatensystem der Erde angegeben. Um absolute Werte anzugeben, muss der Magnetometer des Geräts verwendet werden, um das Magnetfeld der Erde zu erkennen. Das wiederum ist anfällig für Magnetfeldschwankungen in der Nähe, die die Messwerte verfälschen können. In der Praxis kann dies dazu führen, dass eine Web-App aufgrund eines Magneten in der Nähe eine Reihe von DeviceOrientationEvents registriert, obwohl sich das Gerät selbst nicht bewegt. Für eine Virtual-Reality-Anwendung, bei der nur Änderungen der Ausrichtung erfasst werden sollen, ist dieser magnetische Rausch ein Problem.

Was ändert sich?

Ab Chrome 50 sind die in DeviceOrientationEvent enthaltenen Gradangaben standardmäßig nicht mehr absolut im Bezug auf das Koordinatensystem der Erde. Das bedeutet, dass DeviceOrientationEvents nur ausgelöst werden sollten, wenn tatsächlich eine Bewegung stattfindet, die durch eine Kombination aus Beschleunigungsmesser und Gyroskop des Geräts erkannt wird. Der Magnetometer und falsche Messwerte aufgrund von Magnetfeldschwankungen sind nicht im Bild.

Aber ich benötige weiterhin absolute Winkel.

Wenn Sie JavaScript schreiben, in dem absolute Grad verwendet werden müssen, z. B. als Teil einer Augmented-Reality-Webanwendung, die direkt auf die physische Welt projiziert werden muss, haben Sie Glück. Das bisherige Verhalten, das vom Magnetometer des Geräts abhängt, ist über ein neues deviceorientationabsolute-Ereignis verfügbar. Aus Sicht des Entwicklers ist es analog zur vorhandenen DeviceOrientationEvent, wobei garantiert ist, dass die Property absolute auf true gesetzt wird.

Unterstützte Funktionen erkennen

Entwickler, die absolute Winkel bevorzugen, können mithilfe der Funktionserkennung feststellen, ob sie sich in einem Browser befinden, der das neue Ereignis DeviceOrientationAbsoluteEvent 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 in DeviceOrientationEvent angegebenen Werte waren nie konsistent.

In Safari und Firefox auf iOS werden relative Werte für die Winkel verwendet, was der Implementierungsänderung in Chrome 50 entspricht. Die Änderung sollte zu mehr Einheitlichkeit bei Webanwendungen führen, die speziell für iOS entwickelt wurden.

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

Zum Zeitpunkt der Erstellung dieses Artikels ist Chrome 50 der erste Browser, der die neue DeviceOrientationAbsoluteEvent unterstützt.

Erweitertes Ausrichtungs-Tracking mit dem DeviceMotionEvent

Boris Smus hat einen sehr detaillierten Artikel verfasst, in dem er einige Nachteile der Verwendung von DeviceOrientationEvent erläutert und erklärt, wie eine benutzerdefinierte Sensorfusion mit DeviceMotionEvents implementiert wird. Sie bieten Low-Level-Zugriff auf den Beschleunigungsmesser und das Gyroskop und können zu einer genaueren Virtual-Reality-Erfahrung für Ihre Nutzer führen.

Zusätzliche Ressourcen