Tldr
ウィンドウの高さ、クロスブラウザーをクエリして、それで完了したい場合は、jQuery.documentSizeを使用してを呼び出します$.windowHeight()
。独自のソリューションを実装するには、読み進めてください。
jQuery またはclientHeight
ドキュメントの をいつ使用するか
jQuery$(window).height()
は のラッパーですdocument.documentElement.clientHeight
。ブラウザーのスクロール バーで覆われたスペースを除いた、ビューポートの高さを示します。一般的に、それは問題なく動作し、ほぼユニバーサルなブラウザー サポートを享受します。しかし、モバイル、特に iOS には癖があります。
iOS では、戻り値は、URL とタブ バーが表示されていなくても、それらが表示されているふりをします。ユーザーがスクロールしてブラウザが最小限の UI に切り替わるとすぐに非表示になります。このプロセスでウィンドウの高さが約 60 ピクセル増加しますが、これは(または jQuery には)反映されません。clientHeight
はビジュアル ビューポートではなくレイアウト ビューポートのclientHeight
サイズを返すため、ズーム状態は反映されません。
だから... モバイルではそれほど素晴らしいとは言えません。
いつ使用するかwindow.innerHeight
クエリできる別のプロパティがあります: window.innerHeight
. これ
- ウィンドウの高さを返します。
- 視覚的なビューポートに基づいています。つまり、ズーム状態を反映しています。
- ブラウザが最小限の UI (モバイル Safari) に入ると更新されます。
- ただし、スクロール バーで覆われた領域が含まれます。
最後のポイントは、単に代替品としてドロップできないことを意味します。また、IE8 ではサポートされておらず、FF25 (2013 年 10 月) より前の Firefox では機能しません。
ただし、モバイル ブラウザはビューポートのスペースを消費しない一時的なオーバーレイとしてスクロール バーを表示し、その点で同じ値window.innerHeight
をd.dE.clientHeight
返すため、モバイルでは代替として使用できます。
クロスブラウザ ソリューション
したがって、実際のウィンドウの高さを見つけるためのクロスブラウザー ソリューションは、次のように機能します (疑似コード)。
IF the size of browser scroll bars is 0 (overlay)
RETURN window.innerHeight
ELSE
RETURN document.documentElement.clientHeight
ここでの問題は、特定のブラウザのスクロール バーのサイズ (幅) を決定する方法です。そのためのテストを実行する必要があります。特に難しいことではありません。必要に応じて、ここでの私の実装、またはBen Alman によるオリジナルの実装をご覧ください。
自分で作成したくない場合は、私のコンポーネントであるjQuery.documentSizeを使用して、$.windowHeight()
callで完了することもできます。