|
iPhone関連 > iPhoneサイト構築 > jQuery Mobile を使用してスマホサイト構築 jQuery Mobile を使用してスマホサイト構築 †※TODO:書きかけの記事 基本的な使い方は、以下のサイトを参照して構築するものとして、 《目次》 ページの基本構成 †デザイン面で重要になるのは、data-role などの data 属性 また data-role="page" の要素は1ページ内に複数持つ事ができ、非同期通信による部分読み込みによって、 <html> <body> <div id="page1" data-role="page"> <div data-role="header"> ヘッダ領域 </div> <div data-role="navbar"> ナビゲーションバー領域 </div> <div data-role="content"> コンテンツ領域 </div> <div data-role="footer"> フッタ </div> </div> <div id="page2" data-role="page"> <div data-role="header"> ヘッダ領域 </div> <div data-role="navbar"> ナビゲーションバー領域 </div> <div data-role="content"> コンテンツ領域 </div> <div data-role="footer"> フッタ </div> </div> </body> </html> 主なdata-role †ナビゲーションバーやフッター、ボタンやリストなどにもそれぞれ data-roleが用意されており、追加したい箇所に
その他の data属性 †また、data-role の他にも、体裁を整えたり、挙動を変える為の data-* 属性が用意されている。
jQuery Mobile によるHTML装飾 †jQuery Mobile が自動的に追加・変更する CSSセレクタや装飾後のHTMLを把握する事で、より細かなカスタマイズを行う事ができる。 例えば、テキストボックスの場合は、以下のように自動装飾される。 素の記述 <input type="text" id="text1" name="text1" value="" > jQueryMobileによる自動装飾後 <div class="ui-input-text ui-shadow-inset ui-corner-all ui-btn-shadow ui-body-c"> <input type="text" id="text1" name="text1" value="" class="ui-input-text ui-body-c"> </div> ※その他の自動装飾の例は jQuery Mobileによる自動装飾後のHTML を参照。 ここで、テキストボックスが無駄に多く取る余白(margin)を小さくしたい場合、 #text1 { margin : 0px !important; }
などを記述しても、余白は小さくならない。 テキストボックスの余白を無くすには、以下のように記述する。 .ui-input-text { margin : 0px !important;}
特定のテキストボックスの余白だけ調整したい場合は、以下のようにdiv等で括って、 <style>
#text1_area .ui-input-text { margin : 0px !important;}
</style>
<div id="text1_area">
<input type="text" id="text1" name="text1" value="" >
</div>
このように、自動装飾後のHTMLがどうなっているかを把握しておかないと、余白調整すらままならない。 ◆解決方法 イベント処理 †用意されているイベント †様々なイベントが用意されているが、とりあえず以下をおさえておけば大抵の事はできる。
イベントの捕捉方法 †data-ajax=falseでない限り、headタグ内に記述したJavaScriptは一度しか読み込まれないので、全ページで同じものを記述する。 <head>
<script>
$(document).on("pageshow", function(){
// 全ページで行う初期表示処理
});
$(document).on("pageshow", "#page1", function(){
// page1 のみで行う初期表示処理
});
</script>
</head>
<body>
<div id="page1" data-role="page">
<script>
$(document).bind("pagehide", "#page1", function(){
// page1 のみで行うページ遷移前処理
});
</script>
</div>
</body>
イベントの捕捉時の注意点 †headタグ内にイベント捕捉を記述した場合は、onによる捕捉でもbindによる捕捉でも <head>
<script>
$(document).on("pageshow", function(){
alert("test1");
});
$(document).on("pageshow", function(){
alert("test2");
});
</script>
<head>
data-role=page 配下にイベント捕捉を記述した場合、 <div id="page1" data-role="page">
<script>
$(document).on("pageshow", "#page1", function(){
alert("onによる捕捉");
});
$(document).bind("pageshow", "#page1", function(){
alert("bindによる捕捉");
});
</script>
<div>
jQuery 1.7b1 以降は bind や live、delegate で書いていた所は全て on で書けるので(onが推奨らしい) <head>
<script>
$(document).on("pageshow", "#page1", function(){ // この書き方は live と等価
// page1の初期処理
});
</script>
<head>
動的に追加したHTMLに対して装飾を行う †動的に追加した要素は、jQueryMobileによるHTML装飾が行われない為、自分で装飾を指示する必要がある。 <div id="#myDiv1"></div>
<script>
$(document).on("pageshow", "#page1", function(){
// 追加/変更した要素の親要素に対してcreateを実行する
var btn = "<input type=\"button\" value=\"動的に追加したボタン\" />";
$("#myDiv1").html(btn).trigger("create");
//$("#myDiv1").append(btn).trigger("create");
});
</script>
|