Programiści pracujący nad aplikacjami internetowymi w wirtualnej lub rozszerzonej rzeczywistości są niewątpliwie zaznajmieni z DeviceOrientationEvent
.
Dla początkujących: w artykule „This End Up: Using Device Orientation” („To się kończy: korzystanie z orientacji urządzenia”) znajdziesz świetny przegląd tego, jak detektor zdarzeń deviceorientation
może reagować na obracanie i przekręcanie urządzenia.
W wcześniejszych wersjach Chrome wartości alpha
, beta
i gamma
zawarte w DeviceOrientationEvent
były podawane w absolute
stopniach w układzie współrzędnych Ziemi. Podanie wartości bezwzględnej wymaga użycia czujnika magnetycznego urządzenia do wykrywania pola magnetycznego Ziemi, które jest podatne na wahania pola magnetycznego w pobliżu, które mogą zakłócać odczyty. W praktyce może to spowodować, że aplikacja internetowa zarejestruje dużą liczbę zdarzeń DeviceOrientationEvent
z powodu obecności w pobliżu magnesu, mimo że samo urządzenie się nie porusza. W przypadku aplikacji rzeczywistości wirtualnej, która śledzi tylko zmiany orientacji, ten szum magnetyczny jest niekorzystny.
Co się zmienia?
Od wersji 50 Chrome współrzędne kątowe zawarte w elementach DeviceOrientationEvent
nie są już domyślnie bezwzględne w układzie współrzędnych Ziemi. Oznacza to, że DeviceOrientationEvent
s powinny być aktywowane tylko wtedy, gdy nastąpi rzeczywisty ruch, wykrywany przez kombinację akcelerometru i żyroskopu urządzenia. Magnetometr i fałszywe odczyty z powodu fluktuacji pola magnetycznego nie są uwzględniane.
Ale nadal potrzebuję wartości bezwzględnej.
Jeśli piszesz kod JavaScript, który musi używać kątów bezwzględnych, np. w ramach aplikacji internetowej do rzeczywistości rozszerzonej, która musi być mapowana bezpośrednio na świat fizyczny, nie musisz się martwić. Poprzednie działanie, zależne od magnetometru urządzenia, jest dostępne za pomocą nowego zdarzenia deviceorientationabsolute
.
Z perspektywy dewelopera jest to analogiczne do istniejącej funkcji DeviceOrientationEvent
, z tą różnicą, że zapewnia, że właściwość absolute
zostanie ustawiona na true
.
Wykrywanie obsługiwanych funkcji
Deweloperzy, którzy wolą bezwzględne wartości, mogą użyć funkcji wykrywania, aby określić, czy przeglądarka obsługuje nowe zdarzenie DeviceOrientationAbsoluteEvent
:
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.
}
Zgodność z różnymi przeglądarkami
Wartości podawane w DeviceOrientationEvent
nigdy nie były spójne.
Safari i Firefox w iOS używają wartości względnych kątów, co odpowiada zmianie implementacji wprowadzonej w Chrome 50. Ta zmiana powinna zwiększyć spójność z aplikacjami internetowymi napisanymi z myślą o systemie iOS.
Firefox (na platformach innych niż iOS), Edge i Chrome w wersjach starszych niż 50 używają wartości bezwzględnych w stopniach Celsjusza dla DeviceOrientationEvent
, gdy są uruchamiane na urządzeniach z odpowiednimi czujnikami.
W momencie pisania tego tekstu Chrome 50 jest pierwszą przeglądarką, która obsługuje nowe DeviceOrientationAbsoluteEvent
.
Zaawansowane śledzenie orientacji za pomocą zdarzenia DeviceMotionEvent
Boris Smus opublikował bardzo szczegółowy artykuł, w którym omawia niektóre wady DeviceOrientationEvent
oraz sposób implementacji niestandardowego połączenia czujników za pomocą DeviceMotionEvent
.
Zapewniają one dostęp do akcelerometru i żyroskopu na niskim poziomie i mogą zapewnić użytkownikom bardziej realistyczne wrażenia z wykorzystaniem rzeczywistości wirtualnej.