JavaScript - (矢印付き)開閉メニューの作り方
JavaScriptを使って、 矢印付きの開閉メニュー(アコーディオンメニュー)を作りました。
メニュー部分の動作は、HTMLの「details」タグとほとんど同じです。
「details」タグがIE、Edgeに対応していないので JavaScriptで作りました。
シンプルな構造で簡単に使えると思いますので、ご自由に利用してください。
矢印付きの開閉メニュー 動作サンプル
HTML
<div class="menu_head arrow_close">メニューA</div>
<div class="menu_body close">
<ul>
<li>A-1</li>
<li>A-2</li>
<li>A-3</li>
</ul>
</div>
<div class="menu_head arrow_close">メニューB</div>
<div class="menu_body close">
<ul>
<li>B-1</li>
<li>B-2</li>
<li>B-3</li>
</ul>
</div>
<div class="menu_head arrow_close">メニューC</div>
<div class="menu_body close">
<ul>
<li>C-1</li>
<li>C-2</li>
<li>C-3</li>
</ul>
</div>
解説
次の「div」タグ2つがワンセットとなります。
上のdivタグがメニュー名で、 下のdivタグがコンテンツ部分です。
<div class="menu_head arrow_close">メニュー名</div>
<div class="menu_body close">
コンテンツ部分
</div>
CSS
<style>
div.close {
display: none;
}
div.menu_head::before {
content: "\025bc ";
}
div.arrow_close::before {
content: "\025b6 ";
}
/* 以下はデザイン部分 ここをカスタマイズします*/
div.menu_head, div.menu_body{
width: 300px;
border: 1px solid black;
}
div.menu_head {
background-color: crimson;
color: white;
font-weight: bold;
margin-top: 5px;
}
</style>
解説
後半がデザイン部分なので、 使用する場合はここでデザインを自由に変えてください。
前半部分は、疑似要素を使って矢印の設定をしています。
JavaScript
<script>
var head = document.getElementsByClassName('menu_head');
for (var i = 0; i < head.length; i++){
head[i].addEventListener('click', function(){
this.classList.toggle('arrow_close');
this.nextElementSibling.classList.toggle('close');
}, false);
}
</script>
解説
JavaScript部分は全部で8行程度のシンプルなコードとなっています。
classList.toggle()メソッドを使って、クラスを付けたり外したりしています。
次のコード部分で、「arrow_close」クラスの付け・外しを行い、矢印を入れ替えます。
this.classList.toggle('arrow_close');
下のコード部分で、「close」クラスの付け・外しを行い、 コンテンツ部分の表示・非表示を入れ替えます。
this.nextElementSibling.classList.toggle('close');
まとめ
・JavaScriptを使って、矢印付き開閉メニューを作ってみました。
・動作はdetailsタグとほぼ同じです。
・CSSの後半部分でデザインを自由に変えてください。
・JavaScript部分は、classList.toggle()メソッドでクラスの付け・外しを行っています。