【jQuery】マウスオーバーでドロップダウンメニューを表示させる方法

魔物が現れた

ヘッダーにたくさんメニューを入れたいのでドロップダウンメニューで表示したい!

けんと

説明しよう!

jQueryを使ったドロップダウンメニューの実装のやり方を紹介します。

ヘッダーのメニューに表示させたいときに無理やり詰め込むと表示崩れの原因にもなるし、何よりユーザーの方からしたら見づらくなってしまいます。

なのである程度カテゴリーごとに分類してドロップダウンメニューにするのがおすすめです。

マウスオーバーでドロップダウンメニューを表示させる方法

See the Pen Untitled by kento-n96 (@kento-n96) on CodePen.

上記のようにマウスオーバーをすることでメニューを表示することができます。
また画像も入れることができます。

コードは「ul」と「li」を使って作成しています。
ドロップダウンで表示させるメニューは「li」の中に「ul」でメニューリストを入れます。

「li」の中に入れた「ul」をjQueryを使って表示、非表示を切り替えます。

コードの解説

HTMLのコード

<li class="menu__name">menu-1

  <!-- liタグの中にulタグを入れる(ドロップダウンで表示させる部分) -->
  <ul class="drop-menu">
    <li class="drop-menu__name"><a href="">menu-1_1</a></li>
    <li class="drop-menu__name"><a href="">menu-1_2</a></li>
    <li class="drop-menu__name"><a href="">menu-1_3</a></li>
  </ul>
</li>

ちょっと分かりづらいですが「li」の中に「ul」タグを入れています。
この部分がドロップダウンメニューで表示させる部分になります。

CSSのコード

/* 位置の基準を設定 */
.menu__name {
	position: relative;
}

.drop-menu {
	/* 初期は表示しない */
  display: none;
	/* 「menu__name」を基準に表示位置を指定 */
	position: absolute;
	/* 「menu__name」の高さ分下に下げて真下に表示 */
	top: 100%;
}

表示のためのコードを抜粋しました。
表示する位置と、最初は非表示にする設定をしています。

jQueryのコード

$(function () {
  // マウスオーバーした時の動作
  $("ul.menu li").hover(
    function () {
      // 下にスライドして表示
      // :not(:animated)をすることで連続してマウスオーバーしても連続して動作しなくなる
      $(".drop-menu:not(:animated)", this).slideDown();
    },
    // マウスオーバーを外したら上にスライドして非表示になる
    function () {
      $(".drop-menu", this).slideUp();
    }
  );
});

マウスオーバーした時の動作を設定しています。
スライドして表示切り替えを行っています。

:not(:animated)をしないと、マウスオーバーを連続でやった後、その回数表示/非表示を延々と繰り返します。

まとめ

今回はドロップメニューについて解説させていただきました。
ご参考に慣れば幸いです!ありがとうございました。