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 DeviceOrientationEvent
s 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 DeviceOrientationEvent
s 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 DeviceMotionEvent
s 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.