jQueryでたった5行で書くアコーディオンパネル
スポンサーリンク
なんだかんだで,jQueryを使えばカッコイイアコーディオンパネルが5行のjavascriptで作れます.
スマートフォンにも使える、クリックで開くアコーディオンメニューjQuery - ホームページ制作やリニューアル印刷物デザインなら大阪のWPC ↑のページを参考にアコーディオンパネルを作ってみました.
実際作ったやつです.画像ですが…
その手順を説明します.簡単ですよ.
javascriptのソース
$(function() { $(".accordion dt").click(function(){ $(this).next("dd").slideToggle().siblings("dd").slideUp(); }); });
これをaccordion.js
と名づけてファイルに保存します.
説明
$(".accordion dt").click(function(){ //クリック時の処理 })
この部分で,「accordion
クラスであるdt要素」,つまり表示されているパネルのどれかクリックすると,内部の処理が発動する用になってます.
これがメインの処理部分です.
$(this).next("dd").slideToggle().siblings("dd").slideUp();
順に読んでいくと,$(this).next("dd")
はクリックされた要素(=this)の次のdd要素.
そいつに,slideToggle()
によってスライドさせます.
dd要素は最初は隠されている要素です.ですのでクリック後はスライドしながら出現します.
さらに,.siblings("dd")
でクリックされたdd要素以外のdd要素全てに対して,.slideUp();
により強制的にスライドしながら消える処理を実行しました.
一行なのでわかりにくいですが,分解するとこうなります.
var d = $(this).next("dd"); //クリックされた要素の次のdd要素. d.slideToggle() //dをスライド d.siblings("dd").slideUp(); //d以外のdd要素全てをスライドさせつつ消す
htmlソース
<html> <head> <script type="text/javascript" src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="accordion.js"></script> <link rel="stylesheet" href="accordion.css" type="text/css"> </head> <body> <dl class="accordion"> <dt>panel1</dt> <dd> <p>text</p> </dd> <dt>panel2</dt> <dd> <p>text</p> </dd> <dt>panel3</dt> <dd> <p>text</p> </dd> </dl> </body> </html>
htmlのソース中は,一応スタイルシートaccordion.css
も入れてます.これは次に説明します.
cssのソース (accordion.css)
* { margin:0; padding:0; } dl.accordion { background:#4af; border: #4af 5px solid; border-radius:3px; width:300px; margin:0 auto 30px; /* padding: 8px; */ font-size:16px; } dl.accordion dt { background:#4af; height:40px; color: #eee; text-align: center; line-height:1.5; cursor:pointer; } dl.accordion dd { background:#FFF; padding:10px; line-height:1.5; display:none; /* 初期化時は消しておく */ }
注意するのは,dd要素のスタイルで,display:none;
を含めることで,最初は見えないようにしておくことです.これ以外は別にこだわらなくてもよし.
以上で終わりです.jQueryはやろうと思えば1行でいくらでもかけるので,シンプルさを求めるなら大変便利ですね~.