ハンバーガーメニューでナビゲーションリンクをクリックするとメニューを閉じる方法
スマホ用のハンバーガーメニューで、ナビゲーション内のリンクをクリックするとメニューが自動で閉じるようにする方法を解説します。
問題点
一般的なハンバーガーメニューでは、.sp_navi dt a
をクリックするとメニューが開閉されます。
しかし、.sp_navi_list li a
をクリックしてもメニューが閉じず、
そのままになってしまうことがあります。
また、 .sp_navi.sp.pc_hide
に sp_new
クラスが残ってしまい、メ
ニューが閉じた状態でも影響を及ぼしてしまうことがあります。
解決策
document.addEventListener
を使用して、ナビゲーションリンクがクリックされた際に、
以下の処理を行います。
- ハンバーガーメニューの開閉ボタン(
.sp_navi dt a
)のactive
クラスを削除 .sp_navi_list
をdisplay: none;
にして確実にメニューを閉じる.sp_navi.sp.pc_hide
のsp_new
クラスを削除し、不要なスタイルが残らないようにする- スクロール制限を解除
修正コード
document.addEventListener("DOMContentLoaded", function () {
// ナビゲーションリンクを取得
document.querySelectorAll(".sp_navi_list li a").forEach(function (navLink) {
navLink.addEventListener("click", function () {
// ハンバーガーメニューの開閉ボタン
var naviToggle = document.querySelector(".sp_navi dt a");
var naviList = document.querySelector(".sp_navi_list");
var naviFixedArea = document.querySelector(".sp_navi_fixed_area");
var spNavi = document.querySelector('.sp_navi.sp.pc_hide'); // メニュー本体
if (naviToggle && naviList) {
// クラスの削除(開いている場合のみ)
if (naviToggle.classList.contains("active")) {
naviToggle.classList.remove("active");
naviList.style.display = "none"; // 確実に非表示
naviList.classList.remove("menu_new"); // 他のクラスによる表示制御も解除
}
// 高さのリセット
if (naviFixedArea) {
naviFixedArea.style.height = "62px";
}
// `.sp_navi.sp.pc_hide` の `sp_new` クラスを削除
if (spNavi && spNavi.classList.contains("sp_new")) {
spNavi.classList.remove("sp_new");
}
// スクロール制限を解除
document.body.style.position = "";
document.body.style.top = "";
window.scrollTo(0, scrollpos);
}
});
});
});
ポイント
sp_new
クラスを削除.sp_navi.sp.pc_hide
にsp_new
が付いたままだと影響が残るため、クリック時に削除。
naviToggle
(.sp_navi dt a
) のactive
も削除- これにより、メニュー開閉時の動作が正しくなる。
display: none;
を適用.sp_navi_list
を確実に非表示にするためにstyle.display = "none";
を適用。
- スクロール制限解除
document.body.style.position = "";
でスクロールロックを解除。
jQuery を使う場合
もし jQuery
を使用している場合は、以下のコードで対応できます。
$(document).ready(function () {
$(".sp_navi_list li a").on("click", function () {
$(".sp_navi_list").hide();
$(".sp_navi dt a").removeClass("active");
$(".sp_navi.sp.pc_hide").removeClass("sp_new");
$("body").css("position", "").css("top", "");
});
});
まとめ
この修正を加えることで、ナビゲーションのリンクをクリックした際に、
- メニューが確実に閉じる
- 不要なクラスが残らない
- スクロール制限が解除される
という状態になり、よりスムーズなユーザー体験を提供できます。ぜひ試してみてください!
【解説】data-ajax=”false”とは?意味・使い方・スムーススクロールとの関係まで徹底解説
4月 11, 2025フォームのチェックボックスをクリックすると別のテキストボックスにテキストを挿入する方法
3月 6, 2025Splide.js で Lazy Load による画像非表示を防ぐ方法
2月 25, 2025