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