Skip to content

scrollNav.js

Manabu Yasuda edited this page Mar 9, 2016 · 4 revisions

スクリプト

  • $navで表示を切り替える要素を指定する
  • stateで付け外しするclass属性を指定する
// @desc - スクロールの方向を判断して、ナビゲーションの表示を切り替えます。
$(function() {
  // 表示を切り替えるナビゲーションのクラス名を指定する。
  var $nav = $('.nav');
  var state = 'is-active';
  $nav.addClass(state);

  var startPos = 0;
  var scrollTimer;

  $(window).scroll(function(){
    var currentPos = $(this).scrollTop();

      // スクロールの動作が終わってから処理を実行。
      // 現在の位置より進むとstateクラスが削除され、
      // 戻るとstateクラスが付与される。
      clearTimeout(scrollTimer);
      scrollTimer = setTimeout(function() {
    if (currentPos >= startPos) {
      $nav.removeClass(state);
    } else {
        $nav.addClass(state);
    }
    startPos = currentPos;
      }, 10);
  });
});

jsではステートクラスの付け替えだけをしている。要素の固定や表示はCSSで指定する。

body {
  padding-top: 3em;
}

/**
 * positionで位置を固定、z-indexで非表示のときに選択できないようにする。
 * opacityとvisivilityで表示を切り替え、transitionでアニメーションをさせる。
 */
.nav {
  margin: 0;
  padding: 1em 0;
  text-align: center;
  list-style-type: none;
  position: fixed;
  z-index: -1;
  top: 0;
  left: 0;
  width: 100%;
  opacity: 0;
  visivility: hidden;
  transition: all ease-out 0.3s;
  background-color: #fff;
  border-bottom: 1px solid #eee;
}

.nav.is-active {
  z-index: 1;
  opacity: 1;
  visivility: visible;
}

.nav li {
  display: inline-block;
}```

Clone this wiki locally