scroll.js 2.6 KB
Newer Older
1
$(document).ready(function () {
2
  // The previous distance from the page to the top.
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
3
  var prevScrollTop = 0;
4 5
  var isNavFix = false;
  var isNavShow = true;
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
6

7
  function headerNavScroll () {
8
    var scrollTop = $(window).scrollTop();
9 10 11
    var delta = scrollTop - prevScrollTop;

    if (scrollTop === 0) {
12 13 14
      $('.header-nav').removeClass('fixed');
      $('.header-nav').removeClass('slider-up');
      $('.header-nav').addClass('slider-down');
15 16

      isNavFix = false;
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
17
    } else {
18 19
      if (!isNavFix) {
        $('.header-nav').addClass('fixed');
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
20

21 22 23 24 25 26 27
        isNavFix = true;
      }

      var MIN_SCROLL_TO_CHANGE_NAV = 5;
      // Make the state of nav bar not change due to tiny scrolling.
      if (Math.abs(delta) > MIN_SCROLL_TO_CHANGE_NAV) {
        if (isNavShow && delta > 0) {
28 29
          $('.header-nav').removeClass('slider-down');
          $('.header-nav').addClass('slider-up');
30 31 32

          isNavShow = false;
        } else if (!isNavShow && delta < 0) {
33 34
          $('.header-nav').removeClass('slider-up');
          $('.header-nav').addClass('slider-down');
35 36

          isNavShow = true;
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
37 38 39
        }
      }
    }
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
40

41
    prevScrollTop = scrollTop;
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
42 43
  }

44 45 46
  function scrollHeadingToTop (anchor) {
    $(anchor)
      .velocity('stop')
47
      .velocity('scroll', { easing: 'easeOutSine' });
48
  }
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

  var isBack2topShow = false;
  // Back the page to top.
  function back2top () {
    function back2topHandler () {
      var $top = $('#back-top');
      var scrollTop = $(window).scrollTop();

      if (scrollTop !== 0) {
        if (!isBack2topShow) {
          $top.addClass('show');
          $top.removeClass('hide');
          isBack2topShow = true;
        }
      } else {
        $top.addClass('hide');
        $top.removeClass('show');
        isBack2topShow = false;
      }
    }

    $(window).on('load', back2topHandler);
    $(window).on('scroll', Stun.utils.throttle(function () {
      back2topHandler();
    }, 500));

    $('#back-top').on('click', function () {
      $('body').velocity('stop').velocity('scroll');
    });
  }

  // Initialization
  headerNavScroll();
  back2top();

  $(window).on('scroll', Stun.utils.throttle(function () {
    headerNavScroll();
  }, 100));

EvanOne(文一)'s avatar
EvanOne(文一) 已提交
88 89 90 91 92 93 94
  Stun.utils.pjaxReloadScroll = function () {
    // Click the heading.
    $('.content')
      .find('h1,h2,h3,h4,h5,h6')
      .on('click', function () {
        scrollHeadingToTop('#' + $(this).attr('id'));
      });
95

EvanOne(文一)'s avatar
EvanOne(文一) 已提交
96 97 98 99
    // Click the post toc.
    $('.toc-link').on('click', function (e) {
      e.preventDefault();
      scrollHeadingToTop($(this).attr('href'));
100
    });
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
101
  };
102

EvanOne(文一)'s avatar
EvanOne(文一) 已提交
103 104
  // Initializaiton
  Stun.utils.pjaxReloadScroll();
EvanOne(文一)'s avatar
EvanOne(文一) 已提交
105
});