jQuery:一定の位置までスクロールしたらメニューをfixedさせる

goto_jp 5,763views 更新:2014年6月11日

サンプルはこちら。

See the Pen xqhkg by Kazuyoshi Goto (@KazuyoshiGoto) on CodePen.

左のメニューが画面上部に来た時点でposition:fixedになり、画面内に常に表示されるようになります。

HTML

<div id="navigation">
  <ul>
    <li><a href="">menu1</a></li>
    ~
  </ul>
</div>

前提として、メニュー部分は「#navigation」として構成されています。

JavaScript

$(function(){
  var fix    = $("#navigation");             //メニューオブジェクトを格納
  var fixTop = fix.offset().top;             //メニューの縦座標を格納
  $(window).scroll(function () {             //スクロールが発生したら開始
    if($(window).scrollTop() >= fixTop) {    //スクロール時の縦座標がメニューの縦座標以上なら…
      fix.css("position","fixed");           //メニューに position:fixed 付与
      fix.css("top","0");                    //メニューに top:0 付与
    } else {
      fix.css("position","");                //メニューの position を空に
      fix.css("top","");                     //メニューの top を空に
    }
  });
});

2行目、3行目はコードをコンパクトにするための値の格納なのですが、2行目でまずオブジェクトを格納しています。
次に3行目では「fix.offset().top」で、画面上部からメニューまでの縦座標を取得しています。

4行目の「$(window).scroll」で、画面内でスクロールが発生した際の処理に入ります。

5行目のif文で、「スクロール時の縦座標がメニューの縦座標より多い場合」という分岐を行っています。
サンプルの場合、メニューの縦座標は50pxです。スクロールが50px以上発生した場合、メニューに「position:fixed」と「top:0」をかけています。それにより画面内に常に固定されて表示されています。

if文に合致しないelseの場合、positionとtopを空にすることで元の位置に戻ります。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません