Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
jQuery Mobile逆引きリファレンス

jQuery Mobile逆引きリファレンス

モバイル端末を縦横回転させたときにレイアウトを調整するには?

2014年10月16日

端末の回転を検知できるorientationchangeイベントを説明して、端末が縦置きの場合は縦並びに、横置きの場合は横並びに表示する方法を説明する。

  • このエントリーをはてなブックマークに追加

 orientationchangeイベントを利用することで、端末の回転を検知できます。例えば以下は、ラジオボタングループを、端末が縦置きの場合は縦並びに、横置きの場合は横並びに表示する例です。

HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>jQuery Mobile</title>
<link rel="stylesheet"
  href="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.css" />
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js">
</script>
<script>
// 端末の回転に応じてラジオボタングループを縦並び/横並びに変更
$(window).on('orientationchange', function(e) {
  // 1端末の向きに応じて、変数typeをセット
  if (e.orientation === 'portrait') {
    var type = 'vertical';
  } else {
    var type = 'horizontal';
  }
  // 2ラジオボタングループの並びを再設定
  $('[data-role="controlgroup"]').controlgroup('option', 'type', type);
});
</script>
</head>
<body>
<div data-role="page">
  <div data-role="header">
    <h1>jQuery Mobile TIPS</h1>
  </div>
  <div role="main" class="ui-content">
    <form method="POST" action="">
      <div class="ui-field-contain">
        <fieldset data-role="controlgroup" data-type="horizontal">
          <legend>使用環境:</legend>
          <input id="entry_os_win" name="entry_os" type="radio" value="win" />
          <label for="entry_os_win">Windows系</label>
          <input id="entry_os_mac" name="entry_os" type="radio" value="mac" />
          <label for="entry_os_mac">Mac系</label>
          <input id="entry_os_lin" name="entry_os" type="radio" value="linux" />
          <label for="entry_os_lin">Linux系</label>
        </fieldset>
      </div>
    </form>
  </div>
  <div data-role="footer">
    <h3>Copyright 1998-2014, YAMADA.Yoshihiro</h3>
  </div>
</div>
</body>
</html>
端末の回転タイミングでラジオボタングループの並びを変化するコード(orientation.html)
端末が縦置きならラジオボタンも縦並び(上)、横置きならば横並びに(下)

 orientationchangeイベントリスナーでは、イベントオブジェクトのorientationプロパティを経由して、端末の現在の向きを参照できます。具体的な戻り値は、以下の通りです。

戻り値概要
portrait 縦置き
landscape 横置き
orientationプロパティの戻り値

 1では、e.orientationプロパティが「portrait」/「landscape」いずれであるかによって、変数typeに「vertical」、または「horizontal」をセットしています。

 変数typeは、Controlgroupウィジェット(=ラジオボタンなどをまとめるためのウィジェット)のtypeオプションに設定するための値を表します(2)。Controlgroupウィジェットでは、typeオプションによってコントロールを縦並びにするか(vertical)、横並びにするか(horizontal)を決めています。マークアップ上では「data-type="horizontal"」のように指定していたオプションです。

 これで端末の回転タイミングで、ラジオボタンの配置が動的に切り替わるようになりました。

補足:端末の向きを判定する方法

 jQuery Mobileでは、デフォルトでwindow.orientationプロパティの情報に基づいて、端末の向きを判定しています。ただし、その環境がwindow.orientationプロパティをサポートしていない場合には、スクリーンのサイズ(縦横比)から端末の向きを推定します。よって、デスクトップブラウザーでもブラウザーサイズを変更することで、orientationcchangeイベントを発生させることができます。

 もしも、常にスクリーンサイズでもって端末の向きを判別させたい場合には、以下のようにorientationChangeEnabledプロパティを設定してください。動作パラメーターの設定についての詳細は、別稿「jQuery Mobileの動作パラメーターを設定するには?」を参照してください。

JavaScript
$.mobile.orientationChangeEnabled = false;
スクリーンサイズで端末の向きを判別させたい場合の設定

 ネイティブなwindow.orientationプロパティは、あくまで端末の向きを表すもので、画面領域が縦長であるかどうかを示すものではありません。ネイティブな判定で意図した動作を得られないようなケースでは、このパラメーターを利用してください。

※以下では、本稿の前後を合わせて5回分(第35回~第39回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

jQuery Mobile逆引きリファレンス
35. ページのロード/切り替え時に初期化/後処理を実行するには?

ページを表示/切り替えするタイミングで発生するイベントにはどのようなものがあるのか。ページイベントの基本的な利用方法を説明する。

jQuery Mobile逆引きリファレンス
36. ページレイアウトが変更したときに処理を実行するには?

ウィジェットのレイアウト状態が変化したとき(例えば開閉パネルが開いた/閉じたときなどに)、処理を実行する方法を説明する。

jQuery Mobile逆引きリファレンス
37. data-defaults/data-enhanced属性でページの描画を高速化するには?

jQuery Mobileでパフォーマンスを改善する方法を解説。ウィジェットの動作パラメーターをデフォルト設定して解釈処理をスキップする方法と、文書ツリーの一部を手書きして自動生成をスキップする方法について紹介する。

jQuery Mobile逆引きリファレンス
38. スクロール時に追加的にコンテンツを読み込むには?

スクロールの開始/終了のタイミングで発生するscrollstart/scrollstopイベントの基本的な使い方を説明。また、画面を縦方向にスクロールするためのsilentScrollメソッドについても紹介する。

jQuery Mobile逆引きリファレンス
39. 【現在、表示中】≫ モバイル端末を縦横回転させたときにレイアウトを調整するには?

端末の回転を検知できるorientationchangeイベントを説明して、端末が縦置きの場合は縦並びに、横置きの場合は横並びに表示する方法を説明する。

サイトからのお知らせ

Twitterでつぶやこう!