Zmiany w orientacji urządzeń niedługo pojawią się w Chrome 50

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.

Dodatkowe zasoby