スクロールで出現するFixメニューと、一定スクロールで消えるFixメニュー

2016年6月4日

pcprogruming

スクロールを開始するとにゅるっと出現するフローティングメニューと、そのフローティングメニューを一定スクロールで消すTipsです。ボトム固定やトップ固定などはCSSの記述でなんとかします。

<div class="fix-menu">
 <ul>
  <li>メニュー</li>
 </ul>
</div>
.fix-menu {
  position: fixed;
  bottom: 0;
  height: auto;
  z-index: 999;
  width: 100%;
  background: rgba(0,0,0,0.8);
}

フローティングメニューはこういう感じで作るとよいでしょう。この場合はボトム固定としていますが、トップ固定の場合は top:0; にするだけですね。

$(function() {
    var topMenu = $('.fix-menu');    
    topMenu.hide();
    $(this).scroll(function () {
        if ($(this).scrollTop() > 160) {
            topMenu.fadeIn();
        } else {
            topMenu.fadeOut();
        }
    });
});

ざっと説明するとスクロール160でメニューが出てくる、それ以外だと消える。という感じのスクリプトになっています。ただしこれだけではページトップヘ戻った時に消えるだけで後はずっと出たままになってしまいます。


$(function () {
 var $body = $('.fix-menu');
 $(this).scroll(function() { 
   var topOffset =  $('#common-footer').offset().top;
   var navTypeAOffsetTop = parseInt(topOffset) - 700;
   if($(this).scrollTop() > navTypeAOffsetTop) {
     $body.addClass('is-fixed');
   } else {
     $body.removeClass('is-fixed');
   }
 });
});

これで指定箇所でフローティングメニューが消えます。

var topOffset =  $('#common-footer').offset().top;

例では #common-footer の座標を取得して変数へ。

var navTypeAOffsetTop = parseInt(topOffset) - 700;

ここで微調整を図ります。消えるのが遅い、と思った場合は -700 を調整していきます。

.is-fixed {
  display: none!important;
}

CSSで絶対消えろ!と宣言しておかないと消えないので注意です。

主な著書

Django

Flask

Bottle