CSS、HTML、jqueryを使用して水平メニューを作成しました。メニュー項目をクリックすると、サブメニューが表示されます。
私の問題は、サブメニューがすでに開いているときに別のメニュー項目をクリックすると、新しいサブメニューが表示されますが、以前に開いていたメニューは非表示にならないことです。
更新: 質問を編集して、現在は 1 つの問題だけに焦点を当てています。
$(".menus_li").click(関数(e) {
$(".blocks_ul", this).toggleClass('submenu-is-active');
});
a {
色: #fff;
テキスト装飾: なし。
}
リ {
リストスタイル: なし;
}
。トップメニュー {
z インデックス: 2;
位置: 固定;
トップ: 0;
左: 0;
幅: 100%;
ディスプレイ: フレックス;
幅: 100%;
背景: #0088ff;
パディング: 1レム;
マージン: 0;
}
.menus_li {
フォントの太さ: 太字;
マージン左: 1rem;
}
.blocks_ul {
表示: なし。
位置: 絶対;
背景: #fff;
上: 100%;
最小幅: 120ピクセル;
境界半径: 8px;
パディング: 1レム;
}
.blocks_ul a {
色: #000;
}
.blocks_ul li {
パディング左: 10px;
フォントの太さ: 通常;
パディング: 0.4rem 0.7rem;
}
.blocks_ul.submenu-is-active {
表示ブロック;
}
.bg_submenu {
背景色: rgba(0, 0, 0, 0.6);
位置: 固定;
トップ: 0;
左: 0;
幅: 100%;
高さ: 100%;
z インデックス: 1;
表示: なし。
}
.bg_submenu.show {
表示ブロック;
}
<スクリプト src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="bg_submenu"></div>
<ul class="トップメニュー">
<li class="menus_li"><a href="#">車 </a>
<ul class="blocks_ul">
<li><a class="menu-link" href="#">メルセデス</a></li>
<li><a class="menu-link" href="#">ジープ</a></li>
<li><a class="menu-link" href="#">フォード</a></li>
<li><a class="menu-link" href="#">BMW</a></li>
<li><a class="menu-link" href="#">テスラ</a></li>
</ul>
</li>
<li class="menus_li"><a href="#">コンピュータ </a>
<ul class="blocks_ul">
<li><a class="menu-link" href="#">Apple</a></li>
<li><a class="menu-link" href="#">Lenovo</a></li>
<li><a class="menu-link" href="#">HP</a></li>
<li><a class="menu-link" href="#">デル</a></li>
<li><a class="menu-link" href="#">Acer</a></li>
</ul>
</li>
</ul>
Your Answer
1 件の回答
次のようにコードを変更できます(コード内の注釈)
const $blocks = $(".blocks_ul"); // すべてのブロックを取得します
const $background = $(".bg_submenu"); // 背景を取得する
$(".menus_li").on('クリック', e => {
const $thisBlock = $(".blocks_ul", e.currentTarget); // 現在のブロックを取得する
$blocks.not($thisBlock).removeClass('サブメニューはアクティブ'); // 他のブロックからクラスを削除します
$thisBlock.toggleClass('サブメニューがアクティブ'); // 現在のブロックのクラスを切り替えます
$background.toggleClass('show', $thisBlock.hasClass('submenu-is-active')); // ブロックを表示している場合は背景のみを表示します
});
$('body').on('click', e => {
const $clicked = $(e.target); // クリックされたターゲットを取得します
// クリックがメニューから発生したかどうかを確認します
if (!$clicked.hasClass('menus_li') && !$clicked.closest('.menus_li').length) {
// そうでない場合は以下を実行します
$blocks.removeClass('サブメニューがアクティブ'); // メニューを非表示にする
$background.removeClass('show'); // 背景を隠す
}
})
a {
色: #fff;
テキスト装飾: なし。
}
リ {
リストスタイル: なし;
}
。トップメニュー {
z インデックス: 2;
位置: 固定;
トップ: 0;
左: 0;
幅: 100%;
ディスプレイ: フレックス;
幅: 100%;
背景: #0088ff;
パディング: 1レム;
マージン: 0;
}
.menus_li {
フォントの太さ: 太字;
マージン左: 1rem;
}
.blocks_ul {
表示: なし。
位置: 絶対;
背景: #fff;
上: 100%;
最小幅: 120ピクセル;
境界半径: 8px;
パディング: 1レム;
}
.blocks_ul a {
色: #000;
}
.blocks_ul li {
パディング左: 10px;
フォントの太さ: 通常;
パディング: 0.4rem 0.7rem;
}
.blocks_ul.submenu-is-active {
表示ブロック;
}
.bg_submenu {
背景色: rgba(0, 0, 0, 0.6);
位置: 固定;
トップ: 0;
左: 0;
幅: 100%;
高さ: 100%;
z インデックス: 1;
表示: なし。
}
.bg_submenu.show {
表示ブロック;
}
Hot Questions
function_exists() はカスタム関数を決定できません
2024-04-29 11:01:01
Google Chromeのモバイル版を表示する方法
2024-04-23 00:22:19
子ウィンドウは親ウィンドウを操作しますが、出力は応答しません。
2024-04-19 15:37:47
親ウィンドウには出力がありません
2024-04-18 23:52:34
CSS マインド マッピングに関するコースウェアはどこにありますか?
2024-04-16 10:10:18
Hot Tools
vc9-vc14 (32+64 ビット) ランタイム ライブラリ コレクション (以下のリンク)
phpStudy のインストールに必要なランタイム ライブラリのコレクションをダウンロードします。
VC9 32ビット
VC9 32 ビット phpstudy 統合インストール環境ランタイム ライブラリ
PHP プログラマー ツールボックスのフルバージョン
プログラマ ツールボックス v1.0 PHP 統合環境
VC11 32ビット
VC11 32ビットphpstudy統合インストール環境ランタイムライブラリ
SublimeText3 中国語版
中国語版、とても使いやすい
ホットトピック
Douyin レベル価格表 1-75
20337
7
20337
7
Wi-FiにIPが割り当てられていないことが表示される
13531
4
13531
4
確認コードを受け取るための仮想携帯電話番号
11851
4
11851
4
Gmailメールのログイン入り口はどこですか?
8836
17
8836
17
Windows セキュリティ センターをオフにする方法
8420
7
8420
7
人気の記事
2025 年の仮想通貨市場のトップ 10 トレンドの予測: 次のトレンドはどこでしょうか?
2025-11-07
By DDD
通貨サークル内で先住犬プロジェクトを特定するにはどうすればよいですか?ゼロコインの罠とリスク警告を回避する
2025-11-07
By DDD
CSS @media クエリの優先順位とルール カバレッジの問題を解決するためのチュートリアル
2025-11-07
By DDD
インストール後にソフトウェアで win10 フォントが見つからない場合の対処法_win10 フォントのインストールと識別方法
2025-11-07
By DDD
鉄道 12306 の支払いに失敗した注文はまだ存在しますか?_鉄道 12306 の支払いに失敗した注文の処理方法
2025-11-07
By DDD





