IPhoneデバイス(iPhone 7、iOS 10、他のiPhoneも同様)でこの問題が発生しています。JavaScriptで、orientationchangeイベントをインターセプトした場合、ハンドラー内で、screen.widthとscreen.heightは同じままです(回転前)。
これはビューポートの設定に依存している可能性があるため、これは.htmlファイルでビューポートを宣言する方法です。
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1, user-scalable=no" />
Chromeのシミュレートされた視覚化ではすべてが正常に機能します。
よろしくお願いします。
私の知る限り、画面の幅/高さは回転後にデバイスで変更されません。デバイスが回転しているかどうかを確認するには、これらのプロパティを読み取ることができます
残念ながら、この動作はすべてのAndroid/iOS/Windowデバイス間で一貫していません。 この図 でかなり説明されていると思います。
iOSでは、画面のサイズを縦長のように返していました。彼らはiOS 8で(ネイティブクラスで)変更しましたが、Safariで変更するのを忘れたか、互換性を保つためにそのままにしていた可能性があります。
向きに基づいた実際のサイズが必要な場合は、window.innerWidth
およびwindow.innerHeight
ビューポートメタタグの有無にかかわらず、同じ値を取得します
Chromeシミュレートされた視覚化では正常に動作します。シミュレーションされた視覚化の画面サイズを返す必要があるためですが、デバイスに基づいて実行されるOSをシミュレートしていません。そのため、実際のデバイスと同じ値を取得できません(この場合、実際のデバイスは適切な値を返しません)
CSSは方向の変更を検出できません。
JavaScriptを使用して方向の変更を取得します。
関数を次のように追加します
window.addEventListener("orientationchange", function() {
document.body.style.width = window.innerWidth;
});
これにより、window
にevent Handler
が追加され、方向が変更されたときにwidth
のbody
が変更されます。
orientationchange
の詳細リファレンス
jQuery mobileには、方向変更イベントを処理する onOrienntetionChange
イベントがあり、手動で方向を変更する$(window).orientationchange();
関数があります。