滚动

时间:2016-08-02 22:57:02

标签: javascript html

我试图将页眉隐藏在向下滚动并在向上滚动时重新出现。现在无论滚动如何,标题都保持固定。我也刚刚开始学习。

https://jsfiddle.net/p17gfg2h/

以下是我试图适应我的代码的JavaScript:

'use strict';

// Declare app level module which depends on views, and components
angular.module('myApp', [
  'ngRoute',
  'myApp.view1',
  'myApp.version'
]).
config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
  $locationProvider.hashPrefix('!');

  $routeProvider.otherwise({redirectTo: '/view1'});
}]);

// Hide Header on on scroll down
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var headerHeight = $('header').outerHeight();

$(window).scroll(function(event){
  didScroll = true;
});

setInterval(function() {
  if (didScroll) {
    hasScrolled();
    didScroll = false;
  }
}, 250);

function hasScrolled() {
  var st = $(this).scrollTop();

  // Make sure they scroll more than delta
  if(Math.abs(lastScrollTop - st) <= delta)
    return;

  // If they scrolled down and are past the navbar, add class .nav-up.
  // This is necessary so you never see what is "behind" the navbar.
  if (st > lastScrollTop && st > headerHeight){
    // Scroll Down
    $('header').removeClass('nav-down').addClass('nav-up');
  } else {
    // Scroll Up
    if(st + $(window).height() < $(document).height()) {
      $('header').removeClass('nav-up').addClass('nav-down');
    }
  }

  lastScrollTop = st;
}

2 个答案:

答案 0 :(得分:0)

工作Demo

HTML:

<header class="" elastic-header>
    <ul>

    </ul>
</header>

CSS:

header {
    height: 50px;
    position: fixed;
    top: 0;
    transition: all 0.5s ease-in-out;
    width: 100%;
    background: #404040;
}

.hide-header {
    height: 0;
}

JavaScript的:

(function() {
    angular.module("app", [])
        .controller("app.controller", function($scope) {

        })
        .directive("elasticHeader", function($window) {
            return {
                link: function (scope, elem, attrs) {
                    var lastPosition = 0;

                    $window.onscroll = function () {
                        var windowOffset = $window.pageYOffset;
                        if (lastPosition > windowOffset) {
                            elem.removeClass("hide-header");
                        } else if (lastPosition < windowOffset) {
                            if (!elem.hasClass("hide-header")) {
                                elem.addClass("hide-header");
                            }
                        }
                        lastPosition = windowOffset;
                    };
                }
            }
        })

})();

我创建了一个名为elasticHeader的指令,我将其附加到HTML中的标题中。因为DOM中的所有更改都应该在指令中完成。 Angular $window具有属性pageYOffset和事件onscroll,因此每当我滚动页面时,附加到$window.onscroll的函数都会触发。

在该函数中,我检查前一个上一个偏移是否大于现在。如果是,它将删除将hide-header设置为0的类height。否则我添加此类。 css属性transition执行所有动画。

答案 1 :(得分:0)

如果您只是想知道为什么你的小提琴不起作用,请删除stric mode指令并设置一个稳定版本的AngularJS(在框架和扩展下,它旁边有一个带有一点装置的javascript)。重新运行它,它应该工作。