> JavaScript/jQuery > スクロールすると特定の位置で固定されて更に スクロールすると固定が解除されるナビゲーションjQuery

スクロールすると特定の位置で固定されて更に スクロールすると固定が解除されるナビゲーションjQuery

当サイトでも実装していますが、ページをスクロールすると特定のナビゲーションを画面の位置に固定し、一定の位置で固定を解除する動きをjQueryで実装します。
コンテンツ量の多い画面では、スクロールすると表示しておきたい要素が消えてしまうこともありますが、固定と固定解除を併用することで効果的な画面を構築できます。

共有リンクや広告要素などを固定表示することで、クリック数増加を補助することができます。

デモ画面

今回は、id="fix_nav"というdiv要素fixedというクラスを使って固定します。
画面をスクロールした時にmenuというIDのdiv要素が画面上部に到達したタイミングでfixedというクラスをつけます。
fixed_notというクラスで固定前のクラスを指定し、fixed_releaceというクラスで固定後のクラスを指定します。

headタグ内に下記スクリプトとソースを挿入してください。

jqueryサンプル
    <script>
        jQuery(function() {
        //ページトップからの高さを取得
            var fixnav_top = jQuery("div#fixnav").offset().top;
            var fixnav_bottom = jQuery("div#fixnav").offset().bottom;
            var fixnav_height = jQuery("div#fixnav").height();
        //コンテンツの高さを取得
            var content_height = jQuery("div#content").height();
            var footer_top = jQuery("div#footer").offset().top;
        // 読み込み時に開いたウィンドウの高さを取得
            var window_height = jQuery(window).height();
        // ウィンドウのサイズを変えたときの高さを取得
            jQuery(window).resize(function(){
                window_height = jQuery(this).height();
            });
        // スクロールされるごとに現在の位置を計算し、Classを付与・除去する。
            jQuery(window).scroll(function(){
                var scroll_height = jQuery(this).scrollTop();
                if (scroll_height < fixnav_top) {
                    jQuery("div#fixnav").removeClass("fixed");
                    jQuery("div#fixnav").removeClass("fixed_releace");
                    jQuery("div#fixnav").addClass("fixed_not");
                } else if (scroll_height > fixnav_top && scroll_height < footer_top - fixnav_height) {
                    jQuery("div#fixnav").removeClass("fixed_not");
                    jQuery("div#fixnav").removeClass("fixed_releace");
                    jQuery("div#fixnav").addClass("fixed");
                } else {
                    jQuery("div#fixnav").removeClass("fixed");
                    jQuery("div#fixnav").removeClass("fixed_releace");
                    jQuery("div#fixnav").addClass("fixed_releace");
                }
            });
        });
    </script>
CSSサンプル
    <style type="text/css">
        #fixnav{height: 400px;}
        .fixed_not{position: relative; top: 0;}
        .fixed{position: fixed; top: 0;}
        .fixed_releace{position: absolute; bottom: 420px;}
    </style>

CSSで固定するdiv要素の高さを指定して下さい。
また、固定後のfixed_releaceクラスで固定を止める高さを指定してください。
今回は、固定するdiv要素の高さを400ピクセルとし、画面最下部から420ピクセルのところで固定を解除しています。

この記事が気に入ったらシェアしてください

関連記事

jQueryでチェックボックスを操作する方法まとめ【2021年版】

jQueryでチェックボックスを操作する方法まとめ【2021年版】

jQueryプラグイン「Colorbox」でYoutube動画をモーダルで表示してみる(レスポンシブ対応済)

jQueryプラグイン「Colorbox」でYoutube動画をモーダルで表示してみる(レスポンシブ対応済)

jQueryプラグイン「Colorbox」でHTMLタグや外部HTMLファイルをモーダルで表示してみる

jQueryプラグイン「Colorbox」でHTMLタグや外部HTMLファイルをモーダルで表示してみる

簡単にモーダルウィンドウを実装できるjQueryプラグイン「Colorbox」

簡単にモーダルウィンドウを実装できるjQueryプラグイン「Colorbox」

SyntaxHighlighterでの表示を色々カスタマイズしてみる

SyntaxHighlighterでの表示を色々カスタマイズしてみる

クリックするとトリガーが×になるドロワーメニュー

クリックするとトリガーが×になるドロワーメニュー

Comment Form

コメント投稿はこちらをクリックしてください
  • コメントを入力してください。
登録フォーム
Name
Mailaddress
URL
Message
Postkey
(スパム対策に、投稿キー を半角で入力してください。)