2017-04-16 27 views
1

我有這樣的代碼:JS方向改變監聽器不點火iOS上,但在Android確實

window.addEventListener("orientationchange", orientation); 

但它不是在iPhone SE射擊orientation()運行iOS 10.3,但它射擊摩托G運行Android 5.1。

我需要它來更新取決於屏幕寬度的東西。如果它未定義(瀏覽器差異),我使用window.innerWidthscreen.width

orientation()如下:

cpr = Math.floor(window.innerWidth/100) - 3; 
if (navigator.userAgent.match(/iPhone|iPad|iPod/i) || navigator.userAgent.match(/Android/i)) cpr = Math.min(Math.floor(screen.width/100) - 1, 8); 
if (!cpr || cpr <= 0) cpr = 1; 
id('times').innerHTML = ""; 
updateTimes(); 

的代碼工作正常,它只是不工作在iOS。我在Chrome開發工具設備查看器中試過它,它允許您使用不同的特定手機或設備來測試屏幕大小和瀏覽器/設備樣式/代碼/用戶代理。它在那裏運行得很好。

我試着查看所有其他堆棧溢出問題,但他們沒有回答我的問題。

您可以瀏覽網站http://rucubing.bitballoon.com以瞭解它是如何工作的。

謝謝!

回答

1

我有一個resize事件的類似問題。 我在this page找到原因。

直到最近,Mobile Safari在調整視口大小和頁面佈局後都正確地發佈了調整大小事件。但是,情況已不復存在。而是在頁面完全佈局之前發佈。任何依賴於clientWidth,clientHeight,getBoundingClientRect等onresize回調的JavaScript現在都被破壞了。

也許orientationchange事件也在頁面完全佈局之前觸發,所以window.innerWidth返回一個錯誤的值。

編輯:

最近我發現document.documentElement.clientWidth返回正確的值。也許這可以幫助你。

+0

我明白你在說什麼。我以前看到過,但認爲這從來沒有影響我的代碼。謝謝! –