A breve verranno apportate modifiche all'orientamento dei dispositivi su Chrome 50

Gli sviluppatori che lavorano su app web di realtà virtuale o aumentata sono senza dubbio familiari con DeviceOrientationEvent. Per chi non lo sapesse, "Questo lato in alto: utilizzo dell'orientamento del dispositivo" fornisce una panoramica eccezionale di come un listener di eventi deviceorientation può rispondere alla rotazione di un dispositivo.

Nelle versioni precedenti di Chrome, i valori alpha, beta, e gamma inclusi in DeviceOrientationEvent venivano forniti come absolute gradi rispetto al sistema di coordinate della Terra. Fornire gradi assoluti richiede l'utilizzo del sensore magnetometro del dispositivo per rilevare il campo magnetico terrestre, che a sua volta è soggetto a fluttuazioni del campo magnetico nelle vicinanze che potrebbero alterare le letture. In pratica, questo potrebbe portare un'app web a registrare una serie di DeviceOrientationEvent a causa di un magnete nelle vicinanze, nonostante il dispositivo stesso non si muova. Per un'applicazione di realtà virtuale che si occupa solo di monitorare le variazioni di orientamento, questo rumore magnetico è una cattiva notizia.

Che cosa cambia

A partire da Chrome 50, per impostazione predefinita i gradi inclusi in DeviceOrientationEvent non sono più assoluti rispetto al sistema di coordinate della Terra. Ciò significa che gli DeviceOrientationEvent devono essere attivati solo quando c'è un movimento effettivo, rilevato da una combinazione di accelerometro e giroscopio di un dispositivo. Il magnetometro e le letture errate dovute alle fluttuazioni del campo magnetico non vengono presi in considerazione.

Ma ho ancora bisogno di gradi assoluti.

Se stai scrivendo codice JavaScript che deve utilizzare gradi assoluti, ad esempio nell'ambito di un'applicazione web di realtà aumentata che deve essere mappata direttamente sul mondo fisico, non disperare. Il comportamento precedente, che dipende dal magnetometro di un dispositivo, è disponibile tramite un nuovo evento deviceorientationabsolute. Dal punto di vista dello sviluppatore, è analogo al valore DeviceOrientationEvent esistente, con la garanzia che la proprietà absolute verrà impostata su true.

Rilevamento di ciò che è supportato

Gli sviluppatori che preferiscono i gradi assoluti possono utilizzare il rilevamento delle funzionalità per determinare se stanno utilizzando un browser che supporta il nuovo 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.
}

Compatibilità cross-browser

I valori riportati nel DeviceOrientationEvent non sono mai stati coerenti.

Safari e Firefox su iOS utilizzano valori relativi per i gradi, che corrispondono alla modifica di implementazione introdotta in Chrome 50. La modifica dovrebbe portare a una maggiore consistenza con le applicazioni web scritte pensando a iOS.

Firefox (su piattaforme diverse da iOS), Edge e le versioni di Chrome precedenti alla 50 utilizzano valori in gradi assoluti per DeviceOrientationEvent quando vengono eseguiti su dispositivi con i sensori appropriati.

Al momento della stesura di questo articolo, Chrome 50 è il primo browser a supportare il nuovo DeviceOrientationAbsoluteEvent.

Monitoraggio avanzato dell'orientamento con DeviceMotionEvent

Boris Smus ha scritto un articolo incredibilmente dettagliato che illustra alcuni dei lati negativi dell'utilizzo di DeviceOrientationEvent e come implementare una fusione di sensori personalizzata utilizzando DeviceMotionEvent. Forniscono accesso a basso livello all'accelerometro e al giroscopio e possono portare a un'esperienza di realtà virtuale più accurata per i tuoi utenti.

Risorse aggiuntive