> 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でlabelにクリックイベントを設定するとダブルクリック判定になる時の対処法

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
(スパム対策に、投稿キー を半角で入力してください。)