タブパネルを作る
お次はタブパネルを作るチュートリアル。さぁ、サクサクいこう。
<html> <head> <style> #container{ width:500px; margin:50px auto; } ul.tab{ padding:0; } ul.tab li{ list-style-type:none; width:100px; height:40px; float:left; } ul.tab li a{ outline:none; /* 下部にも線が入っている画像が指定されている。 */ background:url("http://editors.ascii.jp/m-kobashigawa/jquery_sample/015/images/tab.jpg"); display:block; color:blue; line-height:40px; text-align:center; } ul.tab li a.selected{ /* 下部に線が入っていない画像が指定されている。 */ /* これにより、まるで選択されたタブとそのコンテンツパネルが、*/ /* 一体となって表示されるように見せている */ background:url("http://editors.ascii.jp/m-kobashigawa/jquery_sample/015/images/tab_selected.jpg"); text-decoration:none; color:#333; cursor:default; } ul.panel{ clear:both; border:1px solid #9FB7D4; border-top:none; padding:0; } ul.panel li{ list-style-type:none; padding:10px; text-indent:1em; color:#333; } </style> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.3.2");</script> <script type="text/javascript"> $(function(){ //まず、選択されたタブには、selectedクラスが適用されていることを前提としている。 //で、セレクタを使ってその選択されているタブのURLを抽出する。 var selectedTabUrl = $("ul.tab li a.selected").attr("href") //この抽出したURLにはコンテンツ部分のID「#tab1」とか「#tab2」が、 //文字列として格納されているので、次の一行の中で使用されている擬似セレクタ、 //「:not(...)」の引数としてそのまま利用できる感じ。 //で、「選択されているタグが差し示すコンテンツ以外」のコンテンツを、 //hideを使って非表示にしている。 $("ul.panel li:not("+selectedTabUrl+")").hide() //以上が初期化処理。以下、イベントの登録処理。 //aタグがクリックされた時のイベントを登録 $("ul.tab li a").click(function(){ //全てのaタグからselectedクラスを削除する。(どれも選択されていない状態にする。) $("ul.tab li a").removeClass("selected") //今選択されたaタグに、selectedクラスを適用する。 $(this).addClass("selected") //全てのコンテンツを非表示にする。 $("ul.panel li").hide() //選択されたaタグのhref属性、すなわち対応するコンテンツのIDをセレクターで抽出、 var contentsId = $(this).attr("href") //抽出したIDをセレクタとして使って該当するコンテンツを表示させる。 $(contentsId).show() return false }) }) </script> </head> <body> <div id="container"> <!-- タブ部分をul,liタグで実装 --> <ul class="tab"> <li><a href="#tab1" class="selected">JavaScript</a></li> <li><a href="#tab2">CSS</a></li> <li><a href="#tab3">HTML</a></li> <li><a href="#tab4">jQuery</a></li> <li><a href="#tab5">XHTML</a></li> </ul> <!-- コンテンツ部分をul,liタグで実装 --> <ul class="panel"> <li id="tab1">Lorem ...(中略)... ligula. </li> <li id="tab2">Nam...(中略)...ipsum. </li> <li id="tab3">Pellentesque ...(中略)... velit. </li> <li id="tab4">Vestibulum ...(中略)... magna. </li> <li id="tab5">Vestibulum ...(中略)... velit. </li> </ul> </div> </body> </html>
めぼしい注釈は上記のコード中にコメントとして記入しておいたので参考までに。さて、こいつをベースにアニメーションを付加させてみよう。
<html> <head> <style> #container{ width:500px; margin:50px auto; } ul.tab{ padding:0; } ul.tab li{ list-style-type:none; width:100px; height:40px; float:left; } ul.tab li a{ outline:none; /* 下部にも線が入っている画像が指定されている。 */ background:url("http://editors.ascii.jp/m-kobashigawa/jquery_sample/015/images/tab.jpg"); display:block; color:blue; line-height:40px; text-align:center; } ul.tab li a.selected{ /* 下部に線が入っていない画像が指定されている。 */ /* これにより、まるで選択されたタブとそのコンテンツパネルが、*/ /* 一体となって表示されるように見せている */ background:url("http://editors.ascii.jp/m-kobashigawa/jquery_sample/015/images/tab_selected.jpg"); text-decoration:none; color:#333; cursor:default; } ul.panel{ clear:both; border:1px solid #9FB7D4; border-top:none; padding:0; } ul.panel li{ list-style-type:none; padding:10px; text-indent:1em; color:#333; } </style> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.3.2");</script> <script type="text/javascript"> $(function(){ var selectedTabUrl = $("ul.tab li a.selected").attr("href") $("ul.panel li:not(" + selectedTabUrl + ")").hide() $("ul.tab li a").click(function(){ $("ul.tab li a").removeClass("selected") $(this).addClass("selected") //基本的に、hide→slideUp、show→slideDownに変わっただけ。 $("ul.panel li").slideUp("fast") var contentsId = $(this).attr("href") $(contentsId).slideDown("fast") return false }) }) </script> </head> <body> <div id="container"> <!-- タブ部分をul,liタグで実装 --> <ul class="tab"> <li><a href="#tab1" class="selected">JavaScript</a></li> <li><a href="#tab2">CSS</a></li> <li><a href="#tab3">HTML</a></li> <li><a href="#tab4">jQuery</a></li> <li><a href="#tab5">XHTML</a></li> </ul> <!-- コンテンツ部分をul,liタグで実装 --> <ul class="panel"> <li id="tab1">Lorem ...(中略)... ligula. </li> <li id="tab2">Nam...(中略)...ipsum. </li> <li id="tab3">Pellentesque ...(中略)... velit. </li> <li id="tab4">Vestibulum ...(中略)... magna. </li> <li id="tab5">Vestibulum ...(中略)... velit. </li> </ul> </div> </body> </html>
結構地味なアニメーションだw
もう一つ、コンテンツ内部のデータ(jQuery的に表現するなら、$("ul.panel li").text() で取得できる文字列)を、外部ファイルに出しておきたい場合のコードも記述しておく。
!!注意!!
但し、loadはAjaxの機能を使用する。jsonpを使ってるわけじゃないので、他ドメインのファイルを読み込むことはできない。(やろうとするとクロスサイトスクリプティングになるからね。)そのため、以下のコードを丸写しして実験しても読み込めないのであしからず。
動作させたかったら、実験する環境下(このコードを写経したファイルと同じディレクトリの下)に、Javascript.txt、CSS.txt、HTML.txt、jQuery.txt、XHTML.txtを保存して実験してね。
<html> <head> <style type="text/css"> #container{ width:500px; margin:50px auto; } ul.tab{ padding:0; } ul.tab li{ list-style-type:none; width:100px; height:40px; float:left; } ul.tab li a{ outline:none; background:url("http://editors.ascii.jp/m-kobashigawa/jquery_sample/015/images/tab.jpg"); display:block; color:blue; line-height:40px; text-align:center; } ul.tab li a.selected{ background:url("http://editors.ascii.jp/m-kobashigawa/jquery_sample/015/images/tab_selected.jpg"); text-decoration:none; color:#333; cursor:default; } p.pannel{ clear:both; border:1px solid #9FB7D4; border-top:none; padding:10px; text-indent:1em; color:#333; } </style> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.3.2");</script> <script type="text/javascript"> $(function(){ $("p.pannel").load($("ul.tab li a.selected").attr("href")) $("ul.tab li a").click(function(){ $("ul.tab li a").removeClass("selected") $(this).addClass("selected") $("p.pannel").load($(this).attr("href")) return false }) }) </script> </head> <body> <div id="container"> <ul class="tab"> <!-- hrefにloadしたいファイル名を指定しておく --> <!-- ただし、同一ドメインのファイルのみ。 --> <li><a href="JavaScript.txt" class="selected">JavaScript</a></li> <li><a href="CSS.txt">CSS</a></li> <li><a href="HTML.txt">HTML</a></li> <li><a href="jQuery.txt">jQuery</a></li> <li><a href="XHTML.txt">XHTML</a></li> </ul> <!-- ul li要素を削除。ここにloadしたファイルの内容を表示させる --> <p class="pannel"><p> </div> </body> </html>
以上、タブパネルでした〜。