2012-12-13 12 views
8

Stiamo costruendo un'app HTML5/JavaScript sviluppata per tablet e vogliamo disporre i miei schermi in modo diverso in orizzontale o verticale.Algoritmo JavaScript per determinare l'orientamento del tablet

Inizialmente, stavamo acquisendo notifiche di cambio di orientamento e tenendo traccia dell'orientamento corrente (generalmente indicato come 0, 90, -90 o 180 gradi - vedere this question). Purtroppo, diversi dispositivi segnalano different orientations as "0". Questo link sostiene che si tratta di un bug, ma alcuni elementi dimostrano che questo funziona come progettato, ad esempio, this article suggerisce che "orizzontale" è l'orientamento predefinito e quei dispositivi riportano un orientamento di "0" se conservati in modalità orizzontale .

Successivamente abbiamo cercato di osservare le dimensioni effettive dello schermo, supponendo che quando la larghezza fosse maggiore dell'altezza, eravamo in modalità orizzontale. Ma questo algoritmo viene confuso quando viene visualizzata la tastiera su schermo - quando viene visualizzata la tastiera, vengono restituite le dimensioni dell'area visibile. Quando il dispositivo è, in senso stretto, in modalità verticale, ma la porzione dello schermo non oscurata dalla tastiera è più larga di quanto non sia alta.

La risposta a this question è piuttosto vecchia. È ancora la migliore risposta? Qualcuno ha un buon algoritmo che tiene in considerazione la visibilità della tastiera?

+0

Come di catturare le notifiche di modifica di orientamento, ma ottenere l'orientamento corrente dalla dimensione effettiva dello schermo? (Questo fallisce nel caso in cui l'utente apre la tastiera in modalità verticale, passa al paesaggio e torna al ritratto.) –

+3

È per un'applicazione/un sito web per dispositivi mobili? In tal caso, esamina le query multimediali e prova la larghezza per cambiare le cose. Se hai bisogno di valutarlo in codice javascript, generalmente la larghezza del dispositivo può dirtielo (traccia la larghezza per vedere quale è più grande conoscere paesaggio o ritratto.) Non controllare l'altezza). – agmcleod

+1

qual è il tuo caso d'uso, comunque? Sembra che includendo semplicemente '' e facendo una media query su 'screen e (min-width: 500px) {/ * landscape styles * /}' fare il trucco (e lavorare sui desktop). –

risposta

4

http://jsfiddle.net/jjc39/

Prova questo:

<span id="orientation">orientation</span>​ 

$(document).ready(checkOrientation); 
$(window).resize(checkOrientation); 

function checkOrientation() { 
    var orientation = "Portrait"; 
    var screenWidth = $(window).width(); 
    var screenHeight = $(window).height(); 
    if (screenWidth > screenHeight) { 
     orientation = "Landscape"; 
    } 
    $("#orientation").html(orientation); 
}​ 
+0

Questo è molto più pulito di quello che ho avuto. Scatta comunque, sul case della tastiera. Vedi: http://blog.bcholmes.org/wp-content/uploads/2012/12/jsfiddleOnTablet.png – bcholmes

+0

Sicuro. In jsfiddle, ci si trova all'interno di un iFrame che viene ridimensionato per adattarsi alla tastiera. Mi chiedo se questo si verificherà ancora se avessi il tag completo del corpo esterno per valutare le dimensioni di $ (finestra). –

+0

Proverò alcuni esperimenti senza frame e vedremo. Grazie ancora. – bcholmes

Problemi correlati