0
0

More than 1 year has passed since last update.

jQueryのhoverで離れたmenuを出現させるのにつまづいたこと

Posted at

jQueryのhoverで離れたmenuを出現させるのにつまづいたこと

やりたいこと

ヘッダーにhoverを使ってヘッダーから少し離れた下部にメニューをドロップダウンしたい

つまづいたこと①

ヘッダーとメニューの間が空いているため、矢印がヘッダーから外れるとhoverが外れて表示されているメニューが消える。
quita_1

原因

どうしてもヘッダー(グッズ紹介)からメニューへカーソルを移動させると「この〜切れてしまう」の部分(以降:hover外範囲)があるためにメニューが消えてしまう

どうしたらいいのか

矢印がhover外範囲に移動するときでもメニューが表示された状態を保っていれば、メニューに矢印が入ればメニューの状態は維持される

結果

タイマーを使ってhoverから矢印が離れてから何秒までメニューを維持するコードを書く
※ヘッダー hover 離れる とかで検索したら方法が載っていたため、ほほコピペしました。参考サイトに掲載します。

$(function () {
            moveTimer = 0;
            hideTimer = 0;
            // ホバーしている時
            $('#nav_goods').hover(function () {
                menu = $('#nav_goods_ul');
                // 指定の要素内でマウスが動いている時
                $(this).on('mousemove', function () {
                    // タイマーの解除
                    clearTimeout(moveTimer);
                    clearTimeout(hideTimer);
                    // タイマーのセット(マウスが外れて○秒後にnav_menuを削除)
                    moveTimer = setTimeout(function () {
                        menu.removeClass('nav_menu_goods')

                    }, 10);
                });
                // ホバーが外れている時
            }, function () {
                // タイマーの解除
                clearTimeout(moveTimer);
                // タイマーのセット(マウスが外れて○秒後にnav_menuを追加)
                hideTimer = setTimeout(function () {
                    $('#nav_goods_ul').addClass('nav_menu_goods')
                }, 100);
            });
        });

つまづいたこと②

できたと思ったら、今度はナビゲーション内で横にカーソルを移動させると挙動がおかしい。
お問い合わせに移動してもメニューが消えない
スクリーンショット 2022-01-20 20 41 06

原因

display:noneが入っているclass[nav_menu_goods]が付与されていない
スクリーンショット 2022-01-20 20 50

結果

class[nav_menu_show]を削除すると同時にclass[nav_menu_goods]を追加することにした。


/* hoverすると表示される */
.nav_menu_show {
    width: 960px;
    height: 200px;
    margin: 0 auto;
    z-index: 2;

    display: flex;
    justify-content: center;

    list-style: none;
    background-color: forestgreen;

    position: fixed;
    top: 140px;
    left: 50%;
    transform: translateX(-50%);
    -webkit-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
}


/* hover外れると追加される */
.nav_menu_goods,
.nav_menu_chara {
    display: none;
}


参考サイト

【Js】遅延式のドロップダウンメニュー

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0