2012-07-12 48 views
4

當我將它旋轉到PortraitLandscape時,我編寫了下面的代碼來檢查我的移動屏幕高度。當觸發orientationchange事件時出現錯誤的屏幕高度

window.addEventListener("orientationchange", function(event) { 
    rotateScreen(); 
}, false); 

function rotateScreen() { 
    alert(window.orientation) 
    alert($(window).height()) 
} 

當我將它旋轉到Portrait,我得到0,294當我把它旋轉到Landscape,我得到90,419這個數字是相反的,我試圖把它包在$(document).ready(),但它不工作。

$(document).ready(function(){ 
    alert($(window).height()) 
}) 

它看起來像,當我旋轉移動到Portrait,我得到的Landscape高度,當我旋轉移動到Landscape,我得到的Portrait高度。有人可以建議如何解決它?

感謝

+0

這是什麼代碼的效果? http://jsfiddle.net/pAm62/1/ – EricG 2012-07-19 09:40:51

+0

我也遇到了同樣的問題。有沒有人找到解決這個問題的方法? – 2012-09-17 02:34:35

+0

@Dan Kanze請在下面嘗試我的答案。 – 2012-09-17 06:12:52

回答

2

添加的setTimeout可以解決這個問題,請嘗試以下代碼:

function rotateScreen() { 
    window.setTimeout(function() { 
     alert(window.orientation) 
     alert($(window).height()) 
    }, 500); 

} 
+2

我相信這是一個便宜的黑客,你不能保證它會發生。當它更快時它也會顯得很慢。安迪波希爾的答案是一個更好的解決方案,因爲它可以在正確的時間保證。 – 2014-07-10 13:31:00

7

調整事件得到orientationchange事件後觸發。不過調整大小也可以通過其他東西觸發,如顯示虛擬鍵盤。

因此,要克服這個,我們可以先聽爲orientationchange,一旦發生那麼我們可以添加一個調整聽衆。一旦orientationchange已經完成,將火我們調整事件。一旦完成,我們再取出調整大小的監聽器,以防止其錯誤

$(window).on('orientationchange', function() { 
    var orientationChange = function(evt) { 
     rotateScreen(); 
     $(window).off('resize', orientationChange); 
    } 
    $(window).on('resize', orientationChange); 
}); 

被解僱這有效地創造了一種僞帖子:orientationChange事件。 (我可能會,如果你能避免使用超時)

相關問題