Deweloperzy pracujący nad aplikacjami internetowymi do rzeczywistości wirtualnej lub rozszerzonej niewątpliwie dobrze znają DeviceOrientationEvent
.
Jeśli użytkownik nie zainicjował tej czynności, film „This End Up: Using Device Orientation” zawiera przydatne omówienie tego, jak deviceorientation
detektor zdarzeń może reagować na skręcanie i obracanie urządzenia.
We wcześniejszych wersjach Chrome wartości alpha
, beta
i gamma
zawarte w DeviceOrientationEvent
były podane jako absolute
stopnie względem układu współrzędnych Ziemi. Podanie bezwzględnych stopni
wymaga korzystania z czujnika magnetometru w urządzeniu do wykrywania pola magnetycznego Ziemi, który z kolei jest podatny na wahania pola magnetycznego w pobliżu, które mogą wyrzucać odczyty. W praktyce może to spowodować, że aplikacja internetowa zarejestruje kilka DeviceOrientationEvent
z powodu znajdującego się w pobliżu magnesu, mimo że samo urządzenie się nie porusza. W przypadku aplikacji do rzeczywistości wirtualnej, która tylko śledzi
zmiany orientacji, ten szum magnetyczny nie jest niczym złym.
Co się zmienia?
Od Chrome 50 wartości w obiektach DeviceOrientationEvent
nie są już domyślnie bezwzględne w odniesieniu do układu współrzędnych Ziemi. Oznacza to, że funkcja DeviceOrientationEvent
powinna być wywoływana tylko w przypadku rzeczywistego ruchu, co zostało wykryte przez akcelerometr i żyroskop urządzenia. Magnetometr i fałszywe odczyty spowodowane przez wahania pola magnetycznego są poza obrazem.
Ale nadal potrzebuję absolutnych stopni!
Jeśli piszesz kod JavaScript, który wymaga stosowania stopni bezwzględnych, być może w aplikacji internetowej wykorzystującej rzeczywistość rozszerzoną, która musi być zmapowana bezpośrednio na świat fizyczny, masz szczęście. Poprzednie działanie, zależne od magnetometru urządzenia, jest dostępne w ramach nowego zdarzenia deviceorientationabsolute
.
Z punktu widzenia dewelopera jest to odpowiednik istniejącej już DeviceOrientationEvent
z gwarancją, że właściwość absolute
zostanie ustawiona na true
.
Wykrywam obsługiwane funkcje
Deweloperzy, którzy wolą stopnie bezwzględne, mogą za pomocą wykrywania funkcji określić, czy korzystają z przeglądarki obsługującej 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 tabeli DeviceOrientationEvent
nigdy nie były spójne.
W przeglądarkach Safari i Firefox na iOS używa się wartości względnych stopni, które odpowiadają zmianom w implementacji wprowadzonej w Chrome 50. Ta zmiana powinna doprowadzić do większej spójności z aplikacjami internetowymi, które zostały napisane z myślą o iOS.
Przeglądarka Firefox (na platformach innych niż iOS), Edge i Chrome starszych niż 50 używają bezwzględnych wartości wartości DeviceOrientationEvent
w przypadku działania na urządzeniach z odpowiednimi czujnikami.
W tej chwili Chrome w wersji 50 jest pierwszą przeglądarką, która obsługuje nową wersję DeviceOrientationAbsoluteEvent
.
Zaawansowane śledzenie orientacji przy użyciu DeviceMotionEvent
Boris Smus zawiera fantazyjnie szczegółowy artykuł, w którym opisujemy wady korzystania z DeviceOrientationEvent
oraz sposób, w jaki za pomocą DeviceMotionEvent
wdrożyć dostosowaną fuzji czujnika.
Zapewniają niskopoziomowy dostęp do akcelerometru i żyroskopu, dzięki czemu mogą zapewnić użytkownikom dokładniejsze wrażenia.