質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
hover

これは、HTMLの 擬似クラス[hover]に関するタグです。Hoverは与えられた要素へマウスカーソルを置くことを意味します。また、タッチ可能なデバイスでユーザーが要素へタッチすることをHoverと呼ぶ場合もあります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

1回答

1054閲覧

【jQuery】hoverするとコンマ秒後にイベントを実行する

rightbrain

総合スコア3

hover

これは、HTMLの 擬似クラス[hover]に関するタグです。Hoverは与えられた要素へマウスカーソルを置くことを意味します。また、タッチ可能なデバイスでユーザーが要素へタッチすることをHoverと呼ぶ場合もあります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/10/06 06:42

前提・実現したいこと

ナビゲーションにsetTimeoutを使用して、
コンテンツ名にhoverしたらコンマ秒だけ遅れて以下を実装させたいです。
・サブナビをドロップダウンで表示
・画面全体に半透明のマスクがかかる

半透明のマスクはコンマ秒遅れて実装されますが、肝心のサブナビが表示されません…
jQueryの知識が乏しいため、どこが悪いのかが分かっておりません。
ご教示の程、何卒宜しくお願い致します。

該当のソースコード

【jQuery】

$(function() { $("#gnavi > ul > li").on({ "mouseenter":function(){ sethover = setTimeout(function(){ $(this).next('div').stop().slideDown(500); $('#header_bg').stop().fadeIn(); },500); }, }).parent().on({ "mouseleave":function(){ sethover = setTimeout(function(){ $('>a+div', this).stop().slideUp(500); $("#header_bg").stop().fadeOut(); clearTimeout(setleave); },300); } }); });

【HTML】

<div id="header_bg"></div> <header id="header"> <nav id="gnavi"> <ul> <li> <a href="">コンテンツ名</a> <div class="subnavi">サブナビ</div> </li> <li> <a href="">コンテンツ名</a> <div class="subnavi">サブナビ</div> </li> <li> <a href="">コンテンツ名</a> <div class="subnavi">サブナビ</div> </li> </ul> </nav> </header>

【CSS】

#header_bg { display: none; position: absolute; width: 100%; height: 100%; background: #000; z-index: -10; opacity: 0.7; } #gnavi { position: relative; margin: 0 auto; box-sizing: border-box; max-width: 1200px; height: 65px; } #gnavi > ul { display: flex; justify-content: space-between; } #gnavi > ul > li > a { position: relative; display: flex; align-items: center; box-sizing: border-box; height: 65px; padding: 0 1em; font-size: 16px; font-weight: bold; line-height: 1.25em; color: #000; margin-bottom: 65px; } #gnavi li > a + div { display: none; position: absolute; top: 130px; right: 0; left: 0; width: 100%; margin: auto; background: #fff; box-shadow: 0 15px 15px -15px rgba(0,0,0,0.4) inset; }

試したこと

$("#gnavi > ul > li").on({ を $("#gnavi > ul > li a").on({ にしても
うまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/10/06 06:45

setleaveってなんでしょう?
rightbrain

2020/10/06 07:06

他サイトを参考に作成しているのですが、setleaveはそのまま引用しています。 変更が必要なのか分からずそのままにしてあります…
guest

回答1

0

gnaviのhover処理でそれより上位の#header_bgの表示を付け替えしてしまったら
liの位置がずれてhoverとしてはきちんと処理ができないでしょう。
nextの使い方も変ですし、hoverの遅延だとUIが最悪だと思います

投稿2020/10/06 06:58

編集2020/10/06 06:59
yambejp

総合スコア114968

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/10/06 07:02

とりあえず $("#gnavi > ul > li").hover( function(){ $(this).find('div').stop().delay(500).slideDown(); }, function(){ $(this).find('div').stop().delay(500).slideUp(); }).find('div').hide();
rightbrain

2020/10/06 07:11

ご指摘ありがとうございます。 そうなんですね… それでは、#gnaviと#header_bgの処理は別々で記述したほうが良いということでしょうか。
yambejp

2020/10/06 07:12

hoverするとずれてhoverがはずれるので、hoverで自分より上位の表示切り替えはNGでしょう
rightbrain

2020/10/06 07:33

知らないルールがたくさんありjQueryの知識不足を実感しております… わざわざご回答いただきありがとうございます。 今回は諦めるか他の方法を探してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問