メニューが長すぎるのでクリックした時だけ表示したい、という場合があると思います。
今回は「slideToggle」を使用してアコーディオン風にメニューを表示する方法をご紹介いたします。
サンプル
「メニュー見出し」をクリックするとメニューが表示されます。
サンプルをご覧ください。
ソースと解説
ソースはjs、html、cssの3つとなります。
js
$(function(){
$("#accordion dt").on("click", function() {
$(this).toggleClass('open');
$(this).next().slideToggle(200);
});
});
「#accordion」要素をクリックしたときスライド表示がされます。
クリック時に「open」というクラスか加えられ、アイコンが変化します。
「slideToggle(200)」の「200」でメニューを表示する速度が決定されます。数字を変更することでメニューの表示速度を調節することが可能です。
html
<dl id="accordion">
<dt>
メニュー見出し
</dt>
<dd>
<ul>
<li><a href="#">メニュー1</a></li>
<li><a href="#">メニュー2</a></li>
<li><a href="#">メニュー3</a></li>
</ul>
</dd>
</dl>
「dt」が見出し、「dd」内が表示されるメニューとなります。
css
デフォルトの打ち消しと、見出し、メニューのスタイルに分かれます。
dl,dd,ul,li {
margin: 0;
padding: 0;
}
#accordion dt {
display: inline-block;
padding-left: 20px;
background: url("icon_arr_r.png") no-repeat 0 center;
cursor: pointer;
}
#accordion dt.open {
background: url("icon_arr_u.png") no-repeat 0 center;
}
#accordion dd {
display: none;
padding-left: 40px;
}
デフォルトのスタイルを打ち消しています。
dl,dd,ul,li {
margin: 0;
padding: 0;
}
メニューの見出しのスタイルです。「open」というクラスが加えられた時に、アイコンを変更するようにしています。
#accordion dt {
display: inline-block;
padding-left: 20px;
background: url("icon_arr_r.png") no-repeat 0 center;
cursor: pointer;
}
#accordion dt.open {
background: url("icon_arr_u.png") no-repeat 0 center;
}
メニューのスタイルです。「display: none;」で見出しがクリックされるまでは、メニューを非表示にしています。
#accordion dd {
display: none;
padding-left: 40px;
}
全ソース
jqueryは「jquery-1.11.3.min.js」を使用しています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<title>
slideToggleでアコーディオン風メニューを表示する
</title>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<script type="text/javascript" src="jquery-1.11.3.min.js"></script>
<script type="text/javascript">
$(function(){
$("#accordion dt").on("click", function() {
$(this).toggleClass('open');
$(this).next().slideToggle(200);
});
});
</script>
<style type="text/css">
dl,dd,ul,li {
margin: 0;
padding: 0;
}
#accordion dt {
display: inline-block;
padding-left: 20px;
background: url("icon_arr_r.png") no-repeat 0 center;
cursor: pointer;
}
#accordion dt.open {
background: url("icon_arr_u.png") no-repeat 0 center;
}
#accordion dd {
display: none;
padding-left: 40px;
}
</style>
</head>
<body>
<h1>
slideToggleでアコーディオン風メニューを表示する
</h1>
<dl id="accordion">
<dt>
メニュー見出し
</dt>
<dd>
<ul>
<li><a href="#">メニュー1</a></li>
<li><a href="#">メニュー2</a></li>
<li><a href="#">メニュー3</a></li>
</ul>
</dd>
</dl>
</body>
</html>
まとめ
- ソースはjs、html、cssの3つ。
- 「#accordion」要素をクリックしたときスライド表示がされる。
- クリック時に「open」というクラスか加えられ、アイコンが変化する。
- 「slideToggle(200)」の「200」の数字を変更することで、メニューの表示速度を調節することが可能。
- 「display: none;」で見出しがクリックされるまでは、メニューを非表示にしている。
- jqueryは「jquery-1.11.3.min.js」を使用。
アコーディオン風のメニューはメニュー数が多い時に重宝します。
「jquery.cookie.js」を使用すれば、メニューの開閉状態を保持することも可能です。
jqueryはメソッドなどが豊富で、本当に使いやすいと思います。


コメント