Orientamento e movimento del dispositivo

Gli eventi relativi al movimento e all'orientamento del dispositivo forniscono l'accesso all'accelerometro, al giroscopio e alla bussola integrati nei dispositivi mobili.

Questi eventi possono essere utilizzati per molti scopi; nei giochi, ad esempio, per controllare la direzione o l'azione di un personaggio. Se utilizzati con la geolocalizzazione, possono contribuire a creare una navigazione passo passo più accurata o fornire informazioni su una località specifica.

Riepilogo

  • Rileva il lato del dispositivo rivolto verso l'alto e la sua rotazione.
  • Scopri quando e come rispondere agli eventi di movimento e orientamento.

Quale parte è rivolta verso l\'alto?

Per utilizzare i dati restituiti dagli eventi di movimento e di orientamento del dispositivo, è importante comprendere i valori forniti.

Sistema di riferimento delle coordinate terrestri

Il sistema di coordinate della Terra, descritto dai valori X, Y e Z, è allineato in base alla gravità e all'orientamento magnetico standard.

Sistema di coordinate
X Rappresenta la direzione est-ovest (dove est è positivo).
Y Rappresenta la direzione nord-sud (dove nord è positivo).
Z Rappresenta la direzione verso l'alto, perpendicolare al suolo (dove l'alto è positivo).

Riquadro di coordinate del dispositivo

Illustrazione del frame di coordinate del dispositivo
Illustrazione del sistema di coordinate del dispositivo

Il frame di coordinate del dispositivo, descritto dai valori x, y e z, è allineato in base al centro del dispositivo.

Sistema di coordinate
X Nel piano dello schermo, positivo verso destra.
Y Nel piano dello schermo, positivo verso l'alto.
Z Perpendicolare allo schermo o alla tastiera, positivo se si allontana.

Su uno smartphone o un tablet, l'orientamento del dispositivo si basa sull'orientamento tipico dello schermo. Per smartphone e tablet, si basa sul fatto che il dispositivo sia in modalità Ritratto. Per i computer desktop o laptop, l'orientamento viene considerato in relazione alla tastiera.

Dati sulla rotazione

I dati di rotazione vengono restituiti come angolo di Eulero, che rappresenta il numero di gradi di differenza tra il sistema di coordinate del dispositivo e il sistema di coordinate della Terra.

Alpha

Illustrazione di alfa nel sistema di coordinate del dispositivo
Illustrazione di alfa nel sistema di coordinate del dispositivo

La rotazione attorno all'asse z. Il valore alpha è 0° quando la parte superiore del dispositivo è rivolta direttamente a nord. Quando il dispositivo viene ruotato in senso antiorario, il valore alpha aumenta.

Beta

Illustrazione del frame di coordinate del dispositivo
Illustrazione del beta nel sistema di coordinate del dispositivo

La rotazione attorno all'asse x. Il valore beta è 0° quando la parte superiore e inferiore del dispositivo sono equidistanti dalla superficie della Terra. Il valore aumenta man mano che la parte superiore del dispositivo viene inclinata verso la superficie terrestre.

Gamma

Illustrazione del frame di coordinate del dispositivo
Illustrazione della gamma nel sistema di coordinate del dispositivo

La rotazione attorno all'asse Y. Il valore gamma è 0° quando i bordi sinistro e destro del dispositivo sono equidistanti dalla superficie della Terra. Il valore aumenta man mano che il lato destro si inclina verso la superficie della Terra.

Orientamento del dispositivo

L'evento di orientamento del dispositivo restituisce i dati di rotazione, che includono la quantità di inclinazione del dispositivo in avanti e all'indietro, da un lato all'altro e, se lo smartphone o il laptop ha una bussola, la direzione in cui è rivolto il dispositivo.

Utilizza con parsimonia. Testare l'assistenza. Non aggiornare l'interfaccia utente in ogni evento di orientamento, ma sincronizza con requestAnimationFrame.

Quando utilizzare gli eventi di orientamento del dispositivo

Esistono diversi utilizzi per gli eventi di orientamento del dispositivo. Ecco alcuni esempi:

  • Aggiornare una mappa man mano che l'utente si sposta.
  • Modifiche sottili all'interfaccia utente, ad esempio l'aggiunta di effetti di parallasse.
  • Se combinata con la geolocalizzazione, può essere utilizzata per la navigazione passo passo.

Controlla se è disponibile assistenza e ascolta gli eventi

Per ascoltare DeviceOrientationEvent, controlla innanzitutto se il browser supporta gli eventi. Quindi, collega un listener di eventi all'oggetto window che monitora gli eventi deviceorientation.

if (window.DeviceOrientationEvent) {
  window.addEventListener('deviceorientation', deviceOrientationHandler, false);
  document.getElementById('doeSupported').innerText = 'Supported!';
}

Gestire gli eventi di orientamento del dispositivo

L'evento di orientamento del dispositivo viene attivato quando il dispositivo si sposta o cambia orientamento. Restituisce i dati sulla differenza tra il dispositivo nella sua posizione corrente rispetto al sistema di riferimento di coordinate terrestri.

In genere l'evento restituisce tre proprietà: alpha, beta e gamma. Su Safari mobile, viene restituito un parametro aggiuntivo webkitCompassHeading con la direzione della bussola.

Movimento del dispositivo

L'evento di orientamento del dispositivo restituisce i dati di rotazione, che includono la quantità di inclinazione del dispositivo in avanti e all'indietro, da un lato all'altro e, se lo smartphone o il laptop ha una bussola, la direzione in cui è rivolto il dispositivo.

Utilizza il movimento del dispositivo quando è necessario il movimento corrente del dispositivo. rotationRate viene fornito in °/sec. acceleration e accelerationWithGravity vengono forniti in m/sec2. Tieni presente le differenze tra le implementazioni dei browser.

Quando utilizzare gli eventi relativi al movimento del dispositivo

Esistono diversi utilizzi per gli eventi di movimento del dispositivo. Ecco alcuni esempi:

  • Movimento di scuotimento per aggiornare i dati.
  • Nei giochi, per far saltare o muovere i personaggi.
  • Per le app per la salute e l'attività fisica.

Verifica la presenza di assistenza e ascolta gli eventi

Per ascoltare DeviceMotionEvent, controlla innanzitutto se gli eventi sono supportati nel browser. Quindi, collega un listener di eventi all'window oggetto che ascolta gli eventi devicemotion.

if (window.DeviceMotionEvent) {
  window.addEventListener('devicemotion', deviceMotionHandler);
  setTimeout(stopJump, 3 * 1000);
}

Gestire gli eventi di movimento del dispositivo

L'evento relativo al movimento del dispositivo viene attivato a intervalli regolari e restituisce i dati relativi alla rotazione (in °/secondo) e all'accelerazione (in m/secondo2) del dispositivo in quel momento. Alcuni dispositivi non dispongono dell'hardware necessario per escludere l'effetto della gravità.

L'evento restituisce quattro proprietà, accelerationIncludingGravity, acceleration, che escludono gli effetti della gravità, rotationRate e interval.

Ad esempio, diamo un'occhiata a uno smartphone appoggiato su un tavolo piatto, con lo schermo rivolto verso l'alto.

Stato Rotazione Accelerazione (m/s2) Accelerazione con gravità (m/s2)
Non in movimento [0, 0, 0] [0, 0, 0] [0, 0, 9,8]
Movimento verso l'alto [0, 0, 0] [0, 0, 5] [0, 0, 14.81]
Spostamento solo verso destra [0, 0, 0] [3, 0, 0] [3, 0, 9,81]
Spostamento verso l'alto e verso destra [0, 0, 0] [5, 0, 5] [5, 0, 14.81]

Al contrario, se lo smartphone fosse stato tenuto in modo che lo schermo fosse perpendicolare al suolo ed era direttamente visibile allo spettatore:

Stato Rotazione Accelerazione (m/s2) Accelerazione con gravità (m/s2)
Non in movimento [0, 0, 0] [0, 0, 0] [0, 9,81, 0]
Movimento verso l'alto [0, 0, 0] [0, 5, 0] [0, 14,81, 0]
Spostamento solo verso destra [0, 0, 0] [3, 0, 0] [3, 9,81, 0]
Spostamento verso l'alto e verso destra [0, 0, 0] [5, 5, 0] [5, 14,81, 0]

Esempio: calcolo dell'accelerazione massima di un oggetto

Un modo per utilizzare gli eventi relativi al movimento del dispositivo è calcolare l'accelerazione massima di un oggetto. Ad esempio, qual è l'accelerazione massima di una persona che salta?

if (evt.acceleration.x > jumpMax.x) {
  jumpMax.x = evt.acceleration.x;
}
if (evt.acceleration.y > jumpMax.y) {
  jumpMax.y = evt.acceleration.y;
}
if (evt.acceleration.z > jumpMax.z) {
  jumpMax.z = evt.acceleration.z;
}

Dopo aver toccato il pulsante Vai!, all'utente viene chiesto di saltare. Durante questo periodo, la pagina memorizza i valori di accelerazione massima (e minima) e, al termine del salto, comunica all'utente l'accelerazione massima.

Feedback