【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法

【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法

メニューが開いてもページが動かない!UX向上のための小技

ハンバーガーメニューやモーダルナビゲーションを開いたとき、後ろのページがスクロールできるままだと見た目も操作性も悪くなってしまいます。
本記事では、jQueryを使ってナビゲーションの開閉に応じて背景スクロールを無効化する方法を、わかりやすく解説します。

🧐 なぜ背景スクロールを止める必要があるのか?

スマホでよく見る全画面ナビゲーションモーダルメニュー。開いた状態で背面がスクロールできてしまうと、以下のようなUXトラブルが発生します:

  • ナビの下でページが勝手に動いてしまう
  • 閉じた時にスクロール位置がズレる
  • 操作していないのに背景がぬるぬる動いて不快

だからこそ、ナビゲーションを開いた瞬間に「ページ全体を固定する」のが大事なのです。

🔧 実装の仕組み

この方法では、次のような構造で動きます:

  1. メニューを開くときに .back クラスをボタンに付ける
  2. <html> 要素に position: fixed を与えて、画面全体のスクロールを停止
  3. メニューを閉じるときに .back を削除し、html のCSSを元に戻す

この流れを jQuery でシンプルに制御します。

💻 jQueryコードと使い方

以下のコードを使うことで、ボタンをクリックするたびにナビゲーションの開閉とスクロールのON/OFFが切り替わります

$(".toggle-btn").on("click", function (e) {
            if (!$(this).hasClass('back')) {
                $(this).addClass('back');
                $("html").css({
                   "height": "100%",
                   "overflow-y": "hidden",
                   "position": "fixed"
                });
            } else {
                $(this).removeClass('back');
                $("html").css({
                    "height:": "auto",
                    "overflow-y": "auto",
                    "position": "static"
                });
            }
        });

🔍 HTML側の一例

<button class="toggle-btn">MENU</button>
<nav class="fullscreen-nav">
  <!-- ナビゲーション内容 -->
</nav>

この .toggle-btn をクリックすると、ナビが開き、背景が固定されるという流れになります。

⚠️ よくある間違いと対処法

問題原因と対策
スクロールが止まらないjQueryが読み込まれていない or セレクターの指定ミス
ナビが閉じてもスクロールできないhtmlのCSSを元に戻す処理が正しく動いていない(typo に注意!)
背景が一瞬ズレる開くときに top の位置保持が必要な場合も。高度化対応で追加できます。

🌟 応用:モーダルやポップアップにも使える!

このコードはナビゲーションだけでなく、以下のUIにも応用できます:

  • モーダルウィンドウ
  • お問い合わせフォームのポップアップ
  • フルスクリーン広告
  • 画像ギャラリーの拡大表示

ポイントは「画面の最前面に何かが開いたら、背景を止める」。この考え方さえあれば、あらゆる場面で使いまわせます!

✅ まとめ

フルスクリーンナビゲーションの開閉時に背景をスクロールさせない処理は、たった数行のjQueryで簡単に実現できます

  • .back クラスで状態管理
  • htmlposition: fixed を使ってスクロール停止
  • ナビを閉じたらCSSを戻してリセット

スマホ対応やUX向上にも役立つこのテクニック、ぜひサイトに取り入れてみてください!

関連記事
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
2025年最新の画像遅延読み込み(Lazy Load)完全ガイド。ネイティブloading="lazy"とIntersectionObserverの使い分け・実装例・SEOやLCPへの最新対応ポイントまで徹底解説。パフォーマンスと検索順位アップのための必読ノウハウ!
aki0o0
aki0o0
1年前
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
PHPでランダムIDを生成するランダムな文字列を生成する
このPHPコードは、セキュリティ重視のWebシステムに必要な「予測不可能な」ランダムトークンを生成するために設計されています。openssl_random_pseudo_bytes() を使うことで、一般的な rand() や mt_rand() よりも格段に安全なランダム性が確保されます。
Details
Details
1年前
PHPでランダムIDを生成するランダムな文字列を生成する
PHPの hash_equals 関数とは?なぜ == や === を使わないのか?
hash_equals は PHP において、2つの文字列が等しいかを安全に比較するための関数です。特にパスワードのハッシュや署名の検証などで使われます。== や === といった通常の比較演算子とは異なり、タイミング攻撃(Timing A […]
解構人
解構人
10ヶ月前
PHPの hash_equals 関数とは?なぜ == や === を使わないのか?
PHPでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
auto_copyright() 関数は、動的に著作権の年数を出力します。引数として開始年を受け取り、現在の年と比較して、単一年または範囲(例: 2015 - 2025)を表示します。
Details
Details
1年前
PHPでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
同一ドメイン配下の複数アプリケーションにおけるCSRF対策ガイド
目次 1. 技術的背景と適用シナリオ 代表的な適用例 技術的利点 潜在的なリスク 2. CSRF保護メカニズムの基本原則 保護の三要素 3. 複数アプリケーション環境におけるセキュリティ課題 3.1 セッション命名衝突の深層的影響 具体的な […]
解構人
解構人
11ヶ月前
同一ドメイン配下の複数アプリケーションにおけるCSRF対策ガイド
ズーム制限とレスポンシブデザイン|日本市場に最適化されたviewport設定とは?
モバイル向けサイトに必須のタグの正しい書き方と、日本市場向けの最適化方法を解説。ガラケー対応・フォント調整・アクセシビリティの注意点まで網羅。
キウイフルーツ
キウイフルーツ
11ヶ月前
ズーム制限とレスポンシブデザイン|日本市場に最適化されたviewport設定とは?
よく使われるPHPライブラリ9選【公式リンク付き・2025年版】
2025年最新!PHPでのWeb開発に役立つライブラリ&フレームワーク12選を厳選紹介。Laravel・Symfony・PHPMailer・Guzzleなど、実務で使えるツールをまとめてチェック。公式リンク付きで、今すぐ使える便利リスト!
aki0o0
aki0o0
1年前
よく使われるPHPライブラリ9選【公式リンク付き・2025年版】
PHPのcheckdnsrr関数徹底解説:メールアドレス検証での活用方法
目次 フォーム開発で遭遇した課題 checkdnsrr関数とは? 主な用途 メールアドレスのドメイン検証 ドメイン存在確認 SPFレコードチェック ネットワーク診断ツール メリット デメリットと制限事項 実際の活用例 基本的なメールドメイン […]
解構人
解構人
10ヶ月前
PHPのcheckdnsrr関数徹底解説:メールアドレス検証での活用方法
Facebookがウェブページを開いたときに自動でFacebookアプリを起動し、指定したユーザーのページを開く方法
このチュートリアルでは、ウェブページからFacebookアプリを自動または手動で起動し、指定したFacebookページを開く方法を紹介しています。ページIDの取得方法、iPhoneとAndroidで異なるリダイレクト方法、リンクによる手動遷移の実装例を説明し、最後にクライアント判別を含むサンプルパッケージも提供しています。Facebook誘導やモバイルUX改善を目指す方におすすめです。
Details
Details
1年前
Facebookがウェブページを開いたときに自動でFacebookアプリを起動し、指定したユーザーのページを開く方法
SEOは聞いたことありますよね?ではGEOってご存知ですか?|生成エンジン最適化(GEO)の重要性や必要なことをまとめました!
SEOは知ってるけどGEOは初耳?AI時代に欠かせない「生成エンジン最適化(GEO)」の意味・必要性・対策ポイントを初心者向けにやさしく解説!
WASABI
WASABI
10ヶ月前
SEOは聞いたことありますよね?ではGEOってご存知ですか?|生成エンジン最適化(GEO)の重要性や必要なことをまとめました!
相対パスと絶対パスの使い方
相対パスは、モジュールやディレクトリ内のローカルな参照に適しており、柔軟性があります。一方、絶対パスはウェブサイト全体で共通のリソース(CSS、画像、CDNなど)を参照する際に便利です。両者を理解して使い分けることで、パスのエラーや読み込み不具合を防げます。
Details
Details
12ヶ月前
相対パスと絶対パスの使い方
スクロールに応じてアニメーション!jQueryで要素にクラスを追加する方法
jQuery を使ってページのスクロールイベントを監視し、特定の位置に到達した際に要素へ指定したクラスを追加することで、CSS アニメーションを利用した「要素の登場アニメーション」を実現できます。これはウェブデザインでよく使われる手法で、ページのインタラクション体験や視覚的な魅力を高める効果があります。
Details
Details
12ヶ月前
スクロールに応じてアニメーション!jQueryで要素にクラスを追加する方法
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
モバイル端末でのクリックイベントとの競合を避けるため、タップ操作には click より touchstart を使うことを推奨。 jQuery UI のバージョンによっては、内部構造が異なる場合があるため、導入時はテストを行うこと。
Details
Details
1年前
jQuery Sortableがスマホなどのタッチスクリーンで使えない場合の対処法
【CSSテクニック】:not()セレクタで階層を跨いだ除外を実現
:not()疑似クラスはCSSでの除外指定に便利ですが、親要素や階層関係に対しては思わぬ制約があります。本記事では、WordPressの投稿構造を例に、インラインコードとコードブロックを正確に区別するためのセレクタ設計を解説します。
無敵の小さな蚊
無敵の小さな蚊
11ヶ月前
【CSSテクニック】:not()セレクタで階層を跨いだ除外を実現
ABテストとは?赤か青か?データが導く最適な選択
ABテストは、今やデジタルマーケティングの「常識」となった科学的な意思決定手法です。日本のECサイトやアプリ開発の現場でも、「どちらのデザインが効果的か」「どんなキャッチコピーが響くか」を決める際に頻繁に活用されています。 この手法のルーツ […]
解構人
解構人
10ヶ月前
ABテストとは?赤か青か?データが導く最適な選択