スクロールすると特定の位置で固定されて更に スクロールすると固定が解除されるナビゲーションjQuery
- 投稿日:2015/10/18 |最終更新:2015/10/20
- JavaScript/jQuery
当サイトでも実装していますが、ページをスクロールすると特定のナビゲーションを画面の位置に固定し、一定の位置で固定を解除する動きをjQueryで実装します。
コンテンツ量の多い画面では、スクロールすると表示しておきたい要素が消えてしまうこともありますが、固定と固定解除を併用することで効果的な画面を構築できます。
共有リンクや広告要素などを固定表示することで、クリック数増加を補助することができます。
今回は、id="fix_nav"
というdiv要素をfixed
というクラスを使って固定します。
画面をスクロールした時にmenuというIDのdiv要素が画面上部に到達したタイミングでfixed
というクラスをつけます。fixed_not
というクラスで固定前のクラスを指定し、fixed_releace
というクラスで固定後のクラスを指定します。
headタグ内に下記スクリプトとソースを挿入してください。
jqueryサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <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サンプル
1 2 3 4 5 6 | <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ピクセルのところで固定を解除しています。