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.