2012-12-13 25 views
8

Tabletler için geliştirilmiş bir HTML5/JavaScript uygulaması oluşturuyoruz ve ekranlarımı yatay ve dikey olarak düzenlemek istiyoruz.Tabletin yönünü belirlemek için JavaScript algoritması

Orijinal olarak, yönlendirme değişikliği bildirimlerini yakalıyor ve geçerli yönlendirmeyi takip ediyorduk (genellikle 0, 90, -90 veya 180 derece olarak raporlanıyor - bkz. this question). Ne yazık ki, farklı cihazlar different orientations as "0" bildiriyor. Bu bağlantı, bunun bir hata olduğunu iddia ediyor, ancak bunun tasarlandığı gibi çalıştığına dair bazı kanıtlar var - örneğin, this article, "manzara" nın varsayılan yönelim olduğunu ve bu cihazların yatay modda tutulduğunda "0" yönünü bildirdiklerini öne sürüyor .

Daha sonra, genişlikten daha büyük olduğunda, manzara modunda olduğumuzu varsaydığımızdan, gerçek ekran boyutuna bakmaya çalıştık. Ancak, ekran klavyesi görüntülendiğinde bu algoritma karışır - klavye görüntülendiğinde, görünen alanın boyutları döndürülür. Aygıt, kesinlikle, dikey modda, ancak klavye tarafından gizlenmeyen ekranın kısmı, uzun boylu olduğundan daha geniş olduğunda.

this question cevabı oldukça eskidir. Bu hala en iyi cevap mı? Klavyenin görünürlüğünü göz önünde bulunduran iyi bir algoritma var mı?

+0

nasıl oryantasyon değişikliği bildirimleri yakalayan, ancak gerçek ekran boyutuna güncel yönünü alma hakkında? (Bu, kullanıcının klavyeyi dikey modda açtığı, yatay ve dikey olarak açtığı köşe durumunda başarısız olur.) –

+3

Bu mobil web uygulaması/sitesi için mi? Öyleyse medya sorgularına bakın ve etrafındaki şeyleri değiştirmek için genişliğe karşı test edin. Eğer javascript koduyla değerlendirmeniz gerekiyorsa, genellikle cihazın genişliği de size söyleyecektir (manzarayı portre/manzaraya göre daha büyük görmek için genişliği takip edin. Yüksekliği kontrol etmeyin). – agmcleod

+1

Kullanım durumunuz nedir, neyse? Görünüşe göre, ' 've' ekran üzerinde bir medya sorgusu ve (min-width: 500px) {/ * manzara stilleri * /} ' hile yapmak (ve masaüstleri üzerinde çalışmak). –

cevap

4

http://jsfiddle.net/jjc39/

bu deneyin:

<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

Bu benim sahip olduğum çok daha temiz. Yine de klavyede hala devam ediyor. Bakınız: http://blog.bcholmes.org/wp-content/uploads/2012/12/jsfiddleOnTablet.png – bcholmes

+0

Elbette. Jsfiddle'da, klavyeyi barındırmak için yeniden boyutlandırılan bir iFrame içerisindesiniz. $ (Window) boyutlarını değerlendirmek için tüm dış gövde etiketine sahip olsaydınız bu yine de olur mu merak ediyorum. –

+0

Birkaç kare içermeyen denemeler yapacağım ve göreceğim. Tekrar teşekkürler. – bcholmes

İlgili konular