【jQuery】ドロップダウンメニューを実装する2種類の方法
今回は、jQueryを使ってドロップダウンメニューを実装する方法をご紹介いたします。
jQueryのaddClass/removeClassを使って表示させる方法と、slideUp/slideDownを使って表示させる方法の2種類をご紹介したいと思います。
1. jQueryのaddClass/removeClassを使って表示させる方法
完成形デモ
See the Pen dropdown-menu by crnote (@crnote) on CodePen.
html
htmlの記述は以下のようになります。クラス名「dropdown-menu」の部分が、マウスホバーした時に表示される内容です。
- <nav class="gnav">
- <ul class="gnav-contents">
- <li class="menu"><div>メニュー1</div>
- <ul class="dropdown-menu">
- <li><a href="">リンク1</a></li>
- <li><a href="">リンク2</a></li>
- <li><a href="">リンク3</a></li>
- </ul>
- </li>
- <li class="menu"><div>メニュー2</div>
- <ul class="dropdown-menu">
- <li><a href="">リンク1</a></li>
- <li><a href="">リンク2</a></li>
- <li><a href="">リンク3</a></li>
- </ul>
- </li>
- <li class="menu"><div>メニュー3</div>
- <ul class="dropdown-menu">
- <li><a href="">リンク1</a></li>
- <li><a href="">リンク2</a></li>
- <li><a href="">リンク3</a></li>
- </ul>
- </li>
- </ul>
-
- </nav>
CSS
cssでナビゲーション部分のレイアウトと装飾を整えます。
ポイントは、2点です。
① 「.dropdown-menu」に「display: none;」を設定して非表示にする
② 「.dropdown-menu.open」に「display: block;」を設定する
後ほど、jQueryで、マウスホバー時に「.dropdown-menu」にクラス名「open」を付与するという処理を実装をします。
- li {list-style:none;}
- a {
- text-decoration: none;
- color: #000;
- }
- a:hover {
- text-decoration: underline;
- }
- /*レイアウトを整える*/
- .gnav {
- width: 95%;
- margin: 0 auto;
- }
- .gnav .gnav-contents {
- display: flex;
- }
- .gnav .gnav-contents .menu {
- width: calc(100% / 3);
- text-align: center;
- cursor: pointer;
- }
- .gnav .gnav-contents .menu div {
- padding: 10px 0;
- background-color: #ee7800;
- }
- .gnav .gnav-contents .menu .dropdown-menu {
- margin: 0;
- padding: 0;
- background-color: #eda65f;
- /*非表示の設定*/
- display: none;
- }
- /*.openが付与された時、表示の設定*/
- .gnav .gnav-contents .menu .dropdown-menu.open {
- display: block;
- }
- .gnav .gnav-contents .menu .dropdown-menu li {
- padding: 10px 0;
- }
jQuery
$(‘.menu’).hover(function() {…}の…の部分に「.menu」をマウスホバーした場合の動き、
その後の,function() {…}の…の部分に「.menu」をマウスホバーが外れた場合の動きを記述します。
マウスホバーした場合は、addClass()でクラス名「open」を付与します。
マウスホバーが外れた場合は、.removeClass()でクラス名「open」を取り除きます。
$(this).children(‘.dropdown-menu’)は、マウスホバーした.menu(=this)の小要素の「.dropdown-menu」を指します。このような指定をすることで、マウスホバーした箇所の「.dropdown-menu」のみ表示させることが出来ます。
- // ドロップダウンメニュー
- //.menuをhoverした場合
- $('.menu').hover(
- function() {
- //クラス名「open」を付与する
- $(this).children('.dropdown-menu').addClass('open');
- //hoverが外れた場合
- }, function() {
- //クラス名「open」を取り除く
- $(this).children('.dropdown-menu').removeClass('open');
- }
- );
2. jQueryのslideUp/slideDownで表示させる方法
完成形デモ
See the Pen dropdown-menu2 by crnote (@crnote) on CodePen.
HTML
HTMLの記述は上記「1. jQueryのaddClass/removeClassを使って表示させる方法」と同様です。
CSS
cssも、上記と同様にナビゲーション部分のレイアウトと装飾を整えます。
「display: none;」は設定せずに、jQueryで表示/非表示を切り替えます。
- li {list-style:none;}
- a {
- text-decoration: none;
- color: #000;
- }
- a:hover {
- text-decoration: underline;
- }
- /*レイアウトを整える*/
- .gnav {
- width: 95%;
- margin: 0 auto;
- }
- .gnav .gnav-contents {
- display: flex;
- }
- .gnav .gnav-contents .menu {
- width: calc(100% / 3);
- text-align: center;
- cursor: pointer;
- }
- .gnav .gnav-contents .menu div {
- padding: 10px 0;
- background-color: #ee7800;
- }
- .gnav .gnav-contents .menu .dropdown-menu {
- margin: 0;
- padding: 0;
- background-color: #eda65f;
- }
- .gnav .gnav-contents .menu .dropdown-menu li {
- padding: 10px 0;
- }
jQuery
最初に「.menu」の中の「.dropdown-menu」を、.hide()で非表示にします。
マウスホバーした場合は、slideDown()で「.dropdown-menu」を表示します。
マウスホバーが外れた場合は、slideUp()で「.dropdown-menu」を非表示にします。
.dropdown-menu:not(:animated)は、アニメーション実行中でない場合の処理の記述をします。
この記述がないと、マウスホバーをした回数だけ、処理が繰り返されてしまいます。
- // ドロップダウンメニュー
- //.dropdown-menuを一旦隠す
- $('.menu').find('.dropdown-menu').hide();
- //.menuをhoverした場合
- $('.menu').hover(function(){
- //.dropdown-menuをslideDown
- $(".dropdown-menu:not(:animated)", this).slideDown();
- //hoverが外れた場合
- }, function(){
- //.dropdown-menuをslideUp
- $(".dropdown-menu",this).slideUp();
- });
まとめ
jQueryでのドロップダウンメニューの実装方法を2種類ご紹介いたしました。
slideUp/slideDownを使うと、アニメーションに動きを出すことが出来ますね。
自由にカスタマイズして、使い分けてみてください!