2013
5
27
アプリケーションを実行しているスマホの画面サイズや向きを動的に取得できれば、それに応じて表示するコンテンツを調整できますよね。
JavaScriptで画面サイズを取得するためのプロパティが用意されています。
document.write(screen.width);
画面の幅を取得することが出来ます。
document.write(screen.height);
画面の高さを取得することが出来ます。
画面サイズとタスクバーを除いたスクリーンサイズを取得することが出来ます。
document.write(window.innerWidth);
ウィンドウ内側の横幅を、取得したい場合に使用。
※ スクロールバー領域を含む。
IEはスクロールバーを含まないパラメーターを取得するが、FireFoxとOperaはスクロールバーを含む値としてwindow.innerWidthの定義が異なる。
document.write(window.innerHeight);
ウィンドウ内側の縦幅を、取得したい場合に使用。
window.innerWidthとwindow.innerHeight共に「window.」の記述は省略可能。
IE9では使用可能だがIE8以前では対応していない。
デバイス端末の向きを取得するプロパティ。どちらに傾いているのかも判定できる
※iOSでは問題なく使えますが、Android2.2以前ではサポートされていません。
2014年現在、管理人のアクセス解析でAndroid4.0以前のユーザーはほとんどいないでのもうそろそろ気にする必要もないかもです
| 値 | 端末の向き |
|---|---|
| 0 | 通常(縦向き) |
| 90 | 右向き90度(横向き) |
| -90 | 左向き90度(横向き) |
| 180 | 逆さ向き(縦向き) |
var orient = window.onorientation;
if(Math.abs(window.orientation) === 0){
alert("横向き");
} else {
alert("縦向き");
}
window.onorientationのプロパティの絶対値が0であれば「横向き」、それ以外は「縦向き」としてalert表示。
var orient = window.onorientation;
$(window).on("orientationchange resize",function(){
if (Math.abs(window.orientation) === 90){
alert("横")
}else {
alert("縦")
}
});
デバイスの傾きが変わる度にそれぞれの傾き処理を行います。
なんとiPhoneとAndroidでは上記の同じ記述でも処理が行われる順番が異なります。
resizeイベントorientationchangeイベントorientationchangeイベントresizeイベントとなるので画面幅を自動取得する順番が異なる鬼畜仕様なんですね。ニュータイプへの変革の道は遠い・・・。
画面サイズを変更してから傾き処理始まっても意味ないやん・・・
フリックスライダーなどで幅を自動取得で広がってくれるタイプが見当たらないのも納得です。
JavaScriptで画面領域を取得できるプロパティが思いの外たくさんあったので一覧をまとめてみました。(※はIEには非対応のプロパティです。)
取得結果で現在ご使用のディスプレイサイズとウィンドウサイズが出力されます。
| 取得領域 | プロパティ | 取得結果 |
|---|---|---|
| 画面幅 | screen.width | |
| 画面高 | screen.height | |
| 有効画面幅※ | screen.availWidth | |
| 有効画面高 | screen.availHeight | |
| 表示領域幅※ | window.innerWidth | |
| 表示領域高※ | window.innerHeight | |
| ウィンドウ幅※ | window.outerWidth | |
| ウィンドウ高※ | window.outerHeight | |
| 表示領域幅 | $(window).width() | |
| 表示領域高 | $(window).height() | |
| 表示領域幅 | document.documentElement.clientWidth | |
| 表示領域高 | document.documentElement.clientHeight | |
| ドキュメント幅 | $(document).width() | |
| ドキュメント高 | $(document).height() |
アプリ画面で立て向き専用に設定したい場合もありますが、スマホのwebブラウザ上でアプリを動作させている限り、画面の向きを固定することはできないので、
window.onorientationchange関数を利用して、端末の向きを監視して、意図しない向きになった場合に、端末を回転するalertを表示させるイベントを記述
<div id="yanyo"></div>
window.onorientationchange = yanyoInfo;
yanyoInfo();
function yanyoInfo(){
document.getElementById("yanyo")
.innerHTML =
"画面の幅 = " + screen.width + " px<br />" +
"画面の高さ = " + screen.height + " px<br />" +
"画面内の幅 = " + window.innerWidth + " px<br />" +
"画面内の高さ = " + window.innerHeight + " px";
}
if (window.innerWidth > window.innerHeight) {
alert("横向き");
}else{
alert("縦向き");
}
こちらのページを各デバイスで見てもらえると、そのデバイスの全体の画面幅と画面高さ・ツールバー等を除いたコンテンツ幅とコンテンツ高さを表示し、現在のデバイスの向きをアラート表示します。
