2017-03-14 8 views
1

ウィンドウのサイズ変更時に画面サイズに合わせて背景イメージのサイズを設定しようとしています。問題は、モバイルの向きを変更すると、幅と高さが値を交互に使用しないことです。デスクトップブラウザの開発ツールでテストすると、動作しますが、いくつかのモバイルブラウザでテストすると、向きは変わりますが、対策はありません。デバイスの向きを変更しても幅と高さが入れ替わらない

これは基本的なJSです:残念ながら原因私はJSを使用するように強制していiOSの奇妙なVHのバグに

$(function() { 

    function resizeBackground() { 
     $('#background-image').height(screen.height); 
    } 

    resizeBackground(); 
    $(window).resize(resizeBackground); 

}); 

。ここで問題となるのは、一部のブラウザ、特にChromeとFirefoxのブラウザのアドレスバーが非表示になったときに背景画像がジャンプすることです。詳細はこちら:stackoverflow.com/questions/24944925/

+0

iOS Safariで「onresize」イベントと「orinentationchange」イベントの両方が発生しますが、最も適切なのは 'orientationchange'イベントです。例えば、onresizeはキーボードが表示されている場合にも発生します。また、 'screen.height'の' window.outerHeight'を使用することをお勧めします。 –

+0

そして、ドキュメントの高さが必要な場合は、 'document.documentElement.clientHeight'を使用することをお勧めします。 –

答えて

0

これらのモバイルブラウザは、より具体的なorientationchangeイベントをサポートする必要があります。おそらく、彼らはただ一つを発射していて、サイズを変更していないでしょう。 orientationchangeも処理してみてください。

window.screen.heightwindow.screen.widthはあなたのデバイスの実際の高さと幅を取得し、これらの値は、ページサイズ変更や姿勢変化に変更されません。

window.addEventListener('orientationchange', resizeBackground); 
+0

残念ながら変更はありません。デスクトップブラウザでは 'resize'と' orientationchange'の両方が動作しましたが、モバイルでは動作しませんでした。 –

1

私はあなたのソリューションが動作しない理由を説明したい私のコメントをまとめます。ビューポートのサイズ(あなたが実際にビューポートを必要とする)適切な方法(変数)については

window.outerWidthwindow.outerHeight(いくつかのケースでwindow.innerWidthwindow.innerHeightも動作します)です。

実際のドキュメントサイズ(HTMLドキュメント)を取得するには、document.documentElement.clientWidthdocument.documentElement.clientHeightを使用してください。

オリエンテーションの変化を検出するために、onresizeイベントの代わりにorientationchangeイベントを提案します。onresizeは、たとえばキーボードが表示されているときに発生します。

+0

ポイントは、私は 'window.screen.width'と' window.screen.height'を "変更"する必要はないということです。デバイスの尺度について話しているので、デバイスの向きが変わっても、幅と高さが入れ替わるはずです。私がオリエンテーションを変更するときだけでなく、ブラウザのアドレスバーがスライドしてウィンドウのサイズを変更するときに変更が必要なので、私は 'onresize'で行っています。最後に、 'screen.height'を' window.outerHeight'に置き換えると、画像はまったく表示されません... –

関連する問題