2012-12-13 9 views
8

Budujemy aplikację HTML5/JavaScript opracowaną dla tabletów, a my chcemy inaczej przedstawić moje ekrany w układzie poziomym a pionowym.Algorytm JavaScript do określania orientacji tabletu

Pierwotnie przechwytywaliśmy powiadomienia o zmianie orientacji i śledziliśmy aktualną orientację (ogólnie zgłaszane jako 0, 90, -90 lub 180 stopni - patrz this question). Niestety, różne urządzenia zgłaszają different orientations as "0". Odnośnik ten argumentuje, że jest to błąd, ale istnieją pewne dowody na to, że działa on zgodnie z projektem - na przykład, this article sugeruje, że domyślną orientacją jest "pejzaż", a te urządzenia zgłaszają orientację "0" w trybie poziomym .

Następnie próbowaliśmy po prostu spojrzeć na rzeczywisty rozmiar ekranu, zakładając, że gdy szerokość była większa niż wysokość, byliśmy w trybie poziomym. Ale ten algorytm jest zdezorientowany, gdy wyświetlana jest klawiatura ekranowa - gdy wyświetlana jest klawiatura, zwracane są wymiary widocznego obszaru. Kiedy urządzenie jest ściśle rzecz biorąc, w trybie portretowym, ale część ekranu nie zasłonięta przez klawiaturę jest szersza niż jest wysoka.

Odpowiedź na this question jest dość stara. Czy to nadal najlepsza odpowiedź? Czy ktoś ma dobry algorytm, który bierze pod uwagę widoczność klawiatury?

+0

Jak przechwytywanie powiadomienia o zmianie orientacji, ale coraz aktualną orientację od rzeczywistego rozmiaru ekranu? (Nie powiedzie się to w przypadku rogu, w którym użytkownik otwiera klawiaturę w trybie portretu, przechodzi w krajobraz i wraca do portretu.) –

+3

Czy jest to mobilna aplikacja/strona internetowa? Jeśli tak, zajrzyj do zapytań o media i przetestuj szerokość, by zmienić rzeczy. Jeśli chcesz ocenić to w kodzie javascript, ogólnie szerokość urządzenia może Ci również powiedzieć (śledzić szerokość, aby zobaczyć, która jest większa, aby poznać krajobraz kontra portret.) Nie sprawdzaj wysokości). – agmcleod

+1

jaki jest twój przypadek użycia? Wygląda na to, że po prostu włączamy '' i robienie zapytania mediów na ekranie 'i (min-width: 500px) {/ * style krajobrazu * /}' rób to (i pracuj na komputerach). –

Odpowiedz

4

http://jsfiddle.net/jjc39/

Spróbuj tego:

<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

To jest o wiele czystsze niż to, co miałem. Wciąż jednak potyka się o klawiaturę. Zobacz: http://blog.bcholmes.org/wp-content/uploads/2012/12/jsfiddleOnTablet.png – bcholmes

+0

Pewnie tak. W jsfiddle znajdujesz się w ramce iFrame, która jest zmniejszana do rozmiaru klawiatury. Zastanawiam się, czy to by się stało, gdybyś miał pełny zewnętrzny znacznik ciała do oceny wymiarów $ (okna). –

+0

Wypróbuję kilka eksperymentów bezramowych i zobaczę. Dzięki jeszcze raz. – bcholmes

Powiązane problemy