Se implementarán cambios en la orientación de los dispositivos en Chrome 50

Los desarrolladores que trabajan en apps web de realidad aumentada o virtual están familiarizados con DeviceOrientationEvent. Para quienes no están iniciados, "This End Up: Using Device Orientation" ofrece una excelente descripción general de cómo un objeto de escucha de eventos deviceorientation puede responder a un giro y giro de un dispositivo.

En versiones anteriores de Chrome, los valores alpha, beta y gamma incluidos en DeviceOrientationEvent se proporcionaban como grados absolute con respecto al marco de coordenadas de la Tierra. Proporcionar grados absolutos requiere el uso de un sensor de magnetómetro del dispositivo para detectar el campo magnético de la Tierra y, a su vez, es susceptible a las fluctuaciones cercanas del campo magnético que podrían arrojar las lecturas. En la práctica, esto podría provocar que una app web registre varios objetos DeviceOrientationEvent debido a un imán cercano, a pesar de que el dispositivo no se mueva. Para una aplicación de realidad virtual a la que solo le importa el seguimiento de los cambios de orientación, este ruido magnético es una mala noticia.

¿Qué cambios implementaremos?

A partir de Chrome 50, los grados incluidos en el DeviceOrientationEvent ya no son absolutos de forma predeterminada con respecto al marco de coordenadas de la Tierra. Esto significa que los objetos DeviceOrientationEvent solo se deben activar cuando se produzca un movimiento real, como lo detecta alguna combinación del acelerómetro y el giroscopio de un dispositivo. El magnetómetro y las lecturas falsas causadas por las fluctuaciones del campo magnético no aparecen en pantalla.

¡Pero aún necesito grados absolutos!

Si escribes JavaScript que necesita usar grados absolutos, quizás como parte de una aplicación web de realidad aumentada que necesita asignarse directamente al mundo físico, no tienes suerte. El comportamiento anterior, según el magnetómetro del dispositivo, está disponible a través de un evento deviceorientationabsolute nuevo. Desde la perspectiva del desarrollador, es similar al DeviceOrientationEvent existente, con la garantía de que la propiedad absolute se establecerá en true.

Detectar qué se admite

Los desarrolladores que prefieran grados absolutos pueden usar la detección de funciones para determinar si están en un navegador compatible con el nuevo evento 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.
}

Compatibilidad entre navegadores

Los valores informados en DeviceOrientationEvent nunca fueron coherentes.

Safari y Firefox en iOS usan valores relativos para los grados, que coinciden con el cambio de implementación que se introdujo en Chrome 50. El cambio debería conducir a una mayor coherencia con las aplicaciones web que se escribieron teniendo en cuenta iOS.

Las versiones de Firefox (en plataformas que no sean iOS), Edge y Chrome anteriores a la 50 usan valores de grado absolutos para DeviceOrientationEvent cuando se ejecutan en dispositivos con los sensores adecuados.

En el momento de la redacción de este documento, Chrome 50 es el primer navegador que admite la nueva versión de DeviceOrientationAbsoluteEvent.

Seguimiento de orientación avanzado con DeviceMotionEvent

Boris Smus tiene un artículo con detalles fantásticos que detalla algunas de las desventajas de usar DeviceOrientationEvent y cómo implementar una fusión de sensores personalizada con DeviceMotionEvent. Proporcionan acceso de bajo nivel al acelerómetro y al giroscopio, y pueden brindar una experiencia de realidad virtual más precisa para tus usuarios.

Recursos adicionales