クイック スタート: ナビゲーション バー (NavBar) の追加
この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、 「最新のドキュメント」をご覧ください]
JavaScript を使った Windows ストア アプリにナビゲーション バー ("ナビ バー"または"トップ アプリ バー"とも呼ばれます) を追加する方法を説明します。 JavaScript 用 Windows ライブラリ (WinJS) には、単一ページ ナビゲーション アプリの作成をサポートするために、NavBar、NavBarCommand、NavBarContainer の各コントロールが用意されています。
注 NavBar、NavBarCommand、NavBarContainer の各コントロールは Windows 8.1 で追加されました。Windows 8 では、AppBar コントロールと placement プロパティを使ってナビゲーション バーを実現します。
Windows ストア アプリ用のほとんどの Microsoft Visual Studio 2013 テンプレートには、ナビゲーション フレームワークが実装されているため、開発者が実装する必要はありません。これらのテンプレートは、ページ コントロール項目テンプレート (「Page コントロールの追加」参照) も含めて、逆方向のナビゲーションができる BackButton コントロールを含みます。
注 Windows ストア アプリは通常、2 つのナビゲーション パターン (階層システムとフラット システム) のどちらかを使っています。フラット ナビゲーション アプリでは BackButton オブジェクトを使わないことをお勧めします。詳しくは、「Windows ストア アプリのナビゲーション デザイン」をご覧ください。
ここで取り上げる例では、Microsoft Visual Studio の "空のアプリケーション" テンプレートを使います。既定のスタイルとマークアップを使うと、NavBar コントロールに表示するコマンドのスタイルが適切に設定されます。これはコマンド アイコンの画像スプライトとフォント グリフの両方も対象です。
アプリに最適なナビゲーション パターンの選択については、「ナビゲーション パターン」をご覧ください。
また、「アプリの機能の概要」シリーズの「フラット ナビゲーション パターン」と「階層型のナビゲーション パターン」もご覧ください。
必要条件
手順
1. 空のアプリ テンプレートを使って新しいプロジェクトを作る
Visual Studio 2013 を起動します。
注 Visual Studio を初めて起動したときに、開発者用ライセンスを取得するように求められます。
[ファイル]、[新しいプロジェクト] の順にクリックするか、[スタート ページ] タブで [新しいプロジェクト] をクリックします。[新しいプロジェクト] ダイアログ ボックスが表示されます。
[インストール済み] ウィンドウで、[テンプレート]、[JavaScript] の順に展開し、テンプレートの種類として [Windows ストア アプリ] を選びます。JavaScript で使うことができるプロジェクト テンプレートがダイアログ ボックスの中央のウィンドウに表示されます。
中央のウィンドウで、[空のアプリケーション] プロジェクト テンプレートを選びます。
[名前] ボックスに、プロジェクトの名前を入力します。このトピックの例では、「Nav bar demo」を使っています。
[OK] をクリックしてプロジェクトを作ります。
2. プロジェクトにナビゲーション バーの定義を追加する
ナビゲーション バーは、HTML ページで宣言を使って定義することも、ページと共に読み込まれる JavaScript ファイルで実行時に定義することもできます。この例では、HTML マークアップ内で宣言を使ってナビゲーション バーを作ります。
default.html を開き、次の HTML を body
要素に挿入します。ナビゲーション バーは body
要素の直接の子にする必要があります。
ここでは、NavBarContainer コントロールと 2 つの NavBarCommand コントロールを含む NavBar コントロールを宣言します。
注 NavBarCommand コントロールを NavBar の直接の子要素として追加することは有効ですが、お勧めしません。ボタンのレイアウトとキーボードのアクセシビリティの両方に悪影響を与えます。
<div id="navBar" data-win-control="WinJS.UI.NavBar">
<div id="globalNav" data-win-control="WinJS.UI.NavBarContainer">
<div data-win-control="WinJS.UI.NavBarCommand"
data-win-options="{
label: 'Home',
tooltip: 'Take me home',
id:'homeButton',
icon: WinJS.UI.AppBarIcon.home,
location: '/pages/home/home.html',
}">
</div>
<div data-win-control="WinJS.UI.NavBarCommand"
data-win-options="{
label: 'Page 2',
tooltip: 'Take me to Page 2',
id:'page2Button',
icon: WinJS.UI.AppBarIcon.page,
location: '/pages/page2/page2.html',
}">
</div>
</div>
</div>
3. ナビゲーション ハンドラー コードを追加する
マークアップ内に宣言された NavBarCommand オブジェクトは内部でナビゲーション イベント (Navigation.onnavigating と Navigation.onnavigated) を生成するため、ハンドラー コードを NavBarCommand オブジェクトに追加する必要はありません。代わりに、ハンドラー コードを、default.html ファイルに関連付けられた default.js ファイル内の Navigation.onnavigating イベントまたは Navigation.onnavigated イベントに追加する必要があります。
この例では、Navigation.onnavigated イベントにハンドラーを追加します。このハンドラーは、イベント オブジェクトから移動先の URL を取得します (NavBarCommand の data-win-options 属性の location プロパティで定義)。ハンドラーは既にあるコンテンツのコンテンツ ホスト (ページ コントロール) を空にした後、ホストに新しいページをレンダリングします。
ソリューション エクスプローラーで、js フォルダーの default.js を開きます。
default.js で既定のコードを次のコードに置き換えます。
(function () { "use strict"; var app = WinJS.Application; var activation = Windows.ApplicationModel.Activation; var nav = WinJS.Navigation; app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { // Add your initialization code here. } else { // Restore app state here. } var start = WinJS.UI.processAll(). then (function () { return nav.navigate("/pages/home/home.html"); }); args.setPromise(start); } }; app.oncheckpoint = function (args) { // Add app suspension code here. }; nav.onnavigated = function (evt) { var contentHost = document.body.querySelector("#contenthost"), url = evt.detail.location; // Remove existing content from the host element. WinJS.Utilities.empty(contentHost); // Display the new page in the content host. WinJS.UI.Pages.render(url, contentHost); } app.start(); })();
4. 移動する 2 ページを追加する
このページは手作業で追加することも、必要なマークアップと JavaScript コードがすべて用意された Visual Studio ページ コントロール項目テンプレートを使って追加することもできます。
手作業でプロジェクトに新しいページを追加する
ソリューション エクスプローラーで、プロジェクト名 (Nav bar demo) を右クリックし、[追加]、[新しいフォルダー] の順にクリックします。新しいフォルダーに "pages" という名前を付けます。
作成した pages フォルダーを右クリックし、[追加]、[新しいフォルダー] の順にクリックします。新しいフォルダーに "home" という名前を付けます。
pages の下に 2 つ目のフォルダーを作ります。このフォルダーに "page2" という名前を付けます。
home フォルダーを右クリックし、[追加]、[新しい HTML ファイル] の順にクリックします。[新しい項目の追加] ダイアログ ボックスで、このファイルに "home.html" という名前を付け、[追加] をクリックします。
既定の HTML を次の HTML に置き換えます。
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <p>Home</p> </body> </html>
page2 フォルダーでも同じ手順を繰り返します。ファイルには "page2.html" という名前を付けます。
既定の HTML を次の HTML に置き換えます。
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <p>Page2</p> </body> </html>
別の方法として、Visual Studio の Windows ストア アプリ用 JavaScript 項目テンプレートを使うこともできます。
ページ コントロール項目テンプレートを使ってプロジェクトに新しいページを追加する
先に説明したように、pages フォルダーと home、page2 サブフォルダーを作ります。
home フォルダーを右クリックし、[追加]、[新しい項目] の順にクリックします。[新しい項目の追加] ダイアログが表示されます。
一覧から [ページ コントロール] を選びます。[名前] ボックスに「"home.html"」と入力します。
[追加] をクリックします。新しい PageControl オブジェクトがソリューション エクスプローラーに表示されます。
新しい PageControl には、home.css、home.html、home.js の 3 つのファイルがあります。
注 このようにして追加した HTML ファイルは BackButton コントロール用のコードを含みます。先に述べたように、フラット ナビゲーション パターンを使ってい場合は、BackButton オブジェクトを使わないことをお勧めします。したがって、このコードは削除しても問題ありません。詳しくは、「Windows ストア アプリのナビゲーション デザイン」をご覧ください。
page2 フォルダーを右クリックし、[追加]、[新しい項目] の順にクリックします。[新しい項目の追加] ダイアログが表示されます。
一覧から [ページ コントロール] を選びます。[名前] ボックスに「"page2.html"」と入力します。
[追加] をクリックします。新しい PageControl オブジェクトがソリューション エクスプローラーに表示されます。
新しい PageControl には、page2.css、page2.html、page2.js の 3 つのファイルがあります。
5. アプリをテストする
F5 キーを押してアプリを実行します。アプリに [Home] ページが表示されます。
アプリの実行中にアプリの任意の場所で右クリックしてナビゲーション バーを表示し、[Page2] をクリックします。
[Page2] ページがアプリのページ コントロールに表示されます。
もう一度右クリックしてナビゲーション バーを表示し、[Home] をクリックします。
[Home] ページがアプリのページ コントロールに表示されます。
要約と次のステップ
このクイック スタートでは、1 つの NavBarContainer オブジェクトと 4 つの NavBarCommand オブジェクトを含む NavBar オブジェクトをアプリに追加しました。また、Navigation.onnavigated イベント用の単純なハンドラー関数を追加しました。
複雑な階層型のナビゲーションとレイアウトの例について詳しくは、Hub コントロールに関する次のチュートリアルをご覧ください。
クイック スタート: レイアウトとナビゲーションのためのハブ コントロールの使用
関連トピック
初めてのアプリ - パート 3: PageControl オブジェクトとナビゲーション
クイック スタート: レイアウトとナビゲーションのためのハブ コントロールの使用
HTML AppBar コントロールのサンプルに関するページ
HTML NavBar コントロールのサンプルに関するページ
デザイナー向け