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

Jacopo Posnick
Jacopo Posnick

Gli sviluppatori che lavorano su app web di realtà virtuale o aumentata hanno senza dubbio la DeviceOrientationEvent. Per i meno esperti, "This End Up: Using Device Orientation" offre un'ottima panoramica di come un listener di eventi deviceorientation può rispondere alla torsione o alla rotazione di un dispositivo.

Nelle versioni precedenti di Chrome, i valori alpha, beta e gamma inclusi nel DeviceOrientationEvent venivano forniti come absolute gradi rispetto al frame di coordinate della Terra. Specificare gradi assoluti richiede l'utilizzo di un sensore magnetometro di un dispositivo per rilevare il campo magnetico terrestre, che a sua volta è suscettibile alle fluttuazioni del campo magnetico nelle vicinanze che potrebbero compromettere le letture. In pratica, questo potrebbe portare un'app web a registrare un gruppo di DeviceOrientationEvent a causa di un magnete nelle vicinanze, nonostante il dispositivo non si muova effettivamente. Per un'applicazione di realtà virtuale che interessa solo il tracciamento dei cambiamenti nell'orientamento, questo rumore magnetico è una cattiva notizia.

Che cosa cambia

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

Ma ho ancora bisogno di gradi assoluti!

Se stai scrivendo codice JavaScript che richiede l'uso di gradi assoluti, magari come parte di un'applicazione web di realtà aumentata che deve mappare direttamente al mondo fisico, non sei sfortunato. Il comportamento precedente, a seconda del magnetometro di un dispositivo, è disponibile tramite un nuovo evento deviceorientationabsolute. Dal punto di vista dello sviluppatore, è analogo all'DeviceOrientationEvent esistente, con la garanzia che la proprietà absolute verrà impostata su true.

Rilevamento dei contenuti supportati

Gli sviluppatori che preferiscono i gradi assoluti possono utilizzare il rilevamento delle funzionalità per determinare se si trovano su 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à tra 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 dell'implementazione introdotta in Chrome 50. La modifica dovrebbe portare a una maggiore coerenza con le applicazioni web scritte per iOS.

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

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

Monitoraggio avanzato dell'orientamento con DeviceMotionEvent

Boris Smus ha un articolo straordinariamente dettagliato che illustra alcuni svantaggi dell'uso di DeviceOrientationEvent e come implementare una fusione dei sensori su misura usando DeviceMotionEvent. Forniscono accesso a basso livello all'accelerometro e al giroscopio e possono offrire agli utenti un'esperienza di realtà virtuale più accurata.

Risorse aggiuntive