JavaScriptでアコーディオンメニューを操作する方法を現役エンジニアが解説【初心者向け】
初心者向けにJavaScriptでアコーディオンメニューを操作する方法について解説しています。アコーディオンメニューは楽器のアコーディオンのように操作によって開いたり閉じたりするようなメニューのことです。CSSを操作したり、toggleメソッドによって操作することが出来ます。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
JavaScriptでアコーディオンメニューを操作する方法について解説します。実際のコードをもとに解説していきますので、理解を深めていきましょう。
また、入門向けのJavaSriptを学習できるサイトも紹介しているので、合わせてご覧ください。
そもそもJavaScriptについてよく分からないという方は、JavaScriptとは何なのかについて解説した記事を読むとさらに理解が深まります。
なお本記事は、TechAcademyのオンラインブートキャンプJavaScript/jQuery講座の内容をもとにしています。

今回は、JavaScriptに関する内容だね!

どういう内容でしょうか?

アコーディオンメニューを操作する方法について詳しく説明していくね!

お願いします!
アコーディオンメニューとは
アコーディオンメニューとは、アコーディオンのように閉じたり開いたりするメニューです。
JavaScriptでアコーディオンメニューを操作する方法
JavaScriptでアコーディオンを操作するにはいくつかの方法が考えられますが、今回はメニュー要素の visibility をJavaScriptで制御する方法で実装してみます。visibilityについて詳しくは以下の記事を参考にしてください。
実際に書いてみよう
最初は単純にメニュー要素のvisibilityを切り替える例です。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>sample</title>
<style>
#mymenu {
border-style: solid;
}
</style>
</head>
<body>
<button onclick="func1()">表示切替</button>
<div id="mymenu">
<h2>アコーディオンメニュー</h2>
<ul>
<li>項目1</li>
<li>項目2</li>
<li>項目3</li>
</ul>
</div>
<script language="javascript" type="text/javascript">
function func1() {
var tmp = document.getElementById("mymenu").style.visibility;
tmp = (tmp == "visible") ? "hidden" : "visible";
document.getElementById("mymenu").style.visibility = tmp;
}
func1();
</script>
</body>
</html>
実行結果は以下のようになります。表示切替ボタンを押すと、アコーディオンメニューが表示/非表示になります。

少し寂しいのでアニメーションを付けてみましょう。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>sample</title>
<style>
#mymenu {
border-style: solid;
}
.show {
opacity: 1;
transform: translateY(20px);
transition: 500ms;
}
.hide {
opacity: 0;
transition: 500ms;
}
</style>
</head>
<body>
<button onclick="func1()">表示切替</button>
<div id="mymenu" class="show">
<h2>アコーディオンメニュー</h2>
<ul>
<li>項目1</li>
<li>項目2</li>
<li>項目3</li>
</ul>
</div>
<script language="javascript" type="text/javascript">
function func1() {
var elem = document.getElementById("mymenu");
elem.classList.toggle('show');
elem.classList.toggle('hide');
}
</script>
</body>
</html>
実行結果は以下のようになります。静止画では分かりませんが、表示切替の際にアニメーションが追加されています。

アニメーションで使われている transform (変形や移動)、 opacity (透明度の指定)、 transition(transformに要する時間)については、それぞれ以下の記事を参考にしてください。
transform
opacity
transition
筆者プロフィール
| この記事を監修してくれた方
太田和樹(おおたかずき) ITベンチャー企業のPM兼エンジニア 普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。 開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント 地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。 |

内容分かりやすくて良かったです!

ゆかりちゃんも分からないことがあったら質問してね!

分かりました。ありがとうございます!
TechAcademyでは、初心者でもJavaScript・jQueryを使ったWebサービス公開を習得できるオンラインブートキャンプJavaScript/jQuery講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。