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.