Изменения ориентации устройств появятся в Chrome 50

Разработчики, работающие над веб-приложениями виртуальной или дополненной реальности, несомненно, знакомы с DeviceOrientationEvent . Для непосвященных книга « Этот конец: использование ориентации устройства » предоставляет отличный обзор того, как прослушиватель событий deviceorientation может реагировать на поворот и поворот устройства.

В более ранних версиях Chrome значения alpha , beta и gamma включенные в DeviceOrientationEvent предоставлялись в absolute градусах по отношению к системе координат Земли. Для получения абсолютных градусов необходимо использовать датчик магнитометра устройства для обнаружения магнитного поля Земли, а это, в свою очередь, чувствительно к близлежащим колебаниям магнитного поля, которые могут исказить показания. На практике это может привести к тому, что веб-приложение зарегистрирует несколько DeviceOrientationEvent из-за близлежащего магнита, несмотря на то, что само устройство фактически не движется. Для приложения виртуальной реальности, которое заботится только об отслеживании изменений ориентации, этот магнитный шум — плохая новость.

Что меняется?

Начиная с Chrome 50, градусы, включенные в DeviceOrientationEvent по умолчанию больше не являются абсолютными по отношению к системе координат Земли. Это означает, что DeviceOrientationEvent должен запускаться только при фактическом движении, обнаруженном некоторой комбинацией акселерометра и гироскопа устройства. Магнитометр и ложные показания из-за флуктуаций магнитного поля не учитываются.

Но мне все равно нужны абсолютные степени!

Если вы пишете JavaScript, который должен использовать абсолютные степени, возможно, как часть веб-приложения дополненной реальности, которое должно напрямую отображаться в физическом мире, вам не повезло. Предыдущее поведение, зависящее от магнитометра устройства, доступно через новое событие deviceorientationabsolute . С точки зрения разработчика, это аналогично существующему DeviceOrientationEvent с гарантией того, что absolute свойству будет присвоено значение true .

Определение того, что поддерживается

Разработчики, предпочитающие абсолютные степени, могут использовать функцию обнаружения, чтобы определить, поддерживает ли их браузер новое событие 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.
}

Кроссбраузерная совместимость

Значения, указанные в DeviceOrientationEvent никогда не были согласованными.

Safari и Firefox на iOS используют относительные значения степеней, что соответствует изменению реализации, представленному в Chrome 50. Это изменение должно привести к большей согласованности с веб-приложениями, написанными с учетом iOS.

Firefox (на платформах, отличных от iOS), Edge и Chrome версий до 50 используют абсолютные значения градусов для DeviceOrientationEvent при запуске на устройствах с соответствующими датчиками.

На момент написания этой статьи Chrome 50 — первый браузер, поддерживающий новый DeviceOrientationAbsoluteEvent .

Расширенное отслеживание ориентации с помощью DeviceMotionEvent.

У Бориса Смуса есть фантастически подробная статья , в которой подробно описываются некоторые недостатки использования DeviceOrientationEvent и способы реализации индивидуального объединения датчиков с помощью DeviceMotionEvent . Они обеспечивают низкоуровневый доступ к акселерометру и гироскопу и могут обеспечить более точное восприятие виртуальной реальности для ваших пользователей.

Дополнительные ресурсы