プログラムでページ遷移+WebStorageをちょこっと
こんにちは。
Adobe Shadowが発表されましたね。
モバイル開発者には必須のツールになるのではないでしょうか。
私もインストールして使ってみましたが、端末毎のテストが、すごく楽になりそうです。
さて、前々回の続きです。
「開閉パネルとボタンが複数あって、押されたボタンの種類によって、開くパネルを変えたい、と言うケースへの応用」です。
前々回の話しは、プログラムから開閉パネルを展開する方法 をご覧下さい。
画面は、今回も2つです。
ボタンが2つあるindexページと、開閉パネルが2つあるhogeページです。
今回は、ボタンAをタップすると、hogeに遷移して、パネルAが開き、ボタンBをタップすると、同様にhogeに遷移して、パネルBが開く、と言う動きを実現します。
ポイントは、ボタンにidを振って、タップイベントを拾える様にすることと、ボタンのhref要素に、遷移先idを書かずに、#を書く、と言う所です。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Sample</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name = "format-detection" content = "telephone=no"> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" /> <script src="http://code.jquery.com/jquery-1.6.4.min.js"></script> <script src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script> <script src="hoge2.js"></script> </head> <body> <div data-role="page" id="index" data-theme="b"> <div data-role="header" data-theme="b"> <h1><p>indexページのヘッダ</p></h1> </div> <div data-role="content"> <a id="anchorA" href="#" data-role="button">I am button A. Tap me.</a> <a id="anchorB" href="#" data-role="button">I am button B. Tap me.</a> </div> <div data-role="footer" data-theme="b"> <h1><p>indexページのフッタ</p></h1> </div> </div> <div data-role="page" id="hoge" data-theme="b"> <div data-role="header" data-theme="b"> <h1><p>hogeページのヘッダ</p></h1> </div> <div data-role="content"> <div id="foo" data-role="collapsible" data-collapsed="true"> <h1>私は開閉パネルAです</h1> <p> タップする度に、開いたり閉じたりします。 </p> </div> <div id="bar" data-role="collapsible" data-collapsed="true"> <h1>私は開閉パネルBです</h1> <p> 私もタップする度に、開いたり閉じたりします。 </p> </div> </div> <div data-role="footer" data-theme="b"> <h1><p>hogeページのフッタ</p></h1> </div> </div> </body> </html>
$("#index").live("pageinit",function(){ $("#anchorA").bind("tap", function() { //#anchorAのtapイベントにbindする関数を定義。 localStorage['to'] = '#foo'; //Webストレージに変数を保管します。 $.mobile.changePage( "#hoge", { //プログラムからページ遷移します。 type: "post" }); }); $("#anchorB").bind("tap", function() { //#anchorBのtapイベントにbindする関数を定義。 localStorage['to'] = '#bar'; $.mobile.changePage( "#hoge", { type: "post" }); }); }); $("#hoge").live("pageinit",function(){ $(function() { $("div[data-role*='page']").live('pageshow', function(event, ui) { var prevId = ui.prevPage[0].id; if ( prevId != 'index' ) { return; } var to = localStorage['to']; //Webストレージからプロパティ値を取り出します。 if ( to == null ){ return; } $(to).trigger("expand"); $.mobile.silentScroll($(to).offset().top); //おまけ。開いたパネルの位置までスクロールします。 }); }); });
changepageとWebStorageを使うと出来ますよ、と言う話でした。
では、また。
中の人Bでした。