简体   繁体   English

如何在Angular Js中创建粘性标头?

[英]How to make a sticky header in Angular Js?

I am trying to achieve an AngularJs sticky header concept using only angular or vanilla javascript. 我正在尝试仅使用angular或vanilla javascript实现AngularJs粘性标头概念。 (no jQuery dependency). (没有jQuery依赖性)。 I tried to create this directive, but I am missing something ... some suggestions please ? 我试图创建此指令,但我遗漏了一些东西……请提供一些建议?

Working updated code 工作更新的代码

JavaScript 的JavaScript

angular.module('app', [])
.directive('stickyHeader', function ($window) {
return {
    restrict: 'AE',
    link: function (scope, element, attrs) {
      var header = angular.element(element);
      var clone = header[0].before(header.clone().addClass("clone"));

      angular.element($window).bind("scroll", function () {
        var fromTop = $window.pageYOffset;
        var body = angular.element(document).find('body');
        body.toggleClass('down', (fromTop > 400));
      });

      console.log('$window', $window);
      console.log('element', element);
      console.log('header', header);
  }
};
})
 .controller('Main', function ($scope) {
  $scope.angular = angular;
});

 <div>above content</div> <div style="position: sticky;top: 0px;z-index: 1;background-color: red">header</div> <div style="height: 200px">content-1</div> <div>content-2</div> 

try adding the following code. 尝试添加以下代码。

style="position: sticky;top: 0px;z-index: 1;

Try giving it position fixed after (fromTop > 400). 尝试将其位置固定在之后(fromTop> 400)。
With your code I would say add this to your css. 使用您的代码,我会说将此添加到您的CSS中。

.down header {
  position:fixed;
  top:0px;
}

EDIT: I noticed fromTop > 400 is a bit too much for it, try using fromTop > 100 编辑:我注意到fromTop> 400有点太多了,请尝试使用fromTop> 100

I tried to edit your pen and this is what i can do EDITED PEN 我试图编辑您的笔,这是我能做些什么EDITED PEN

What I did is added this lines 我所做的就是添加这行

  if (fromTop >= 80) {
    angular.element(header[0]).css("top", '0');
    angular.element(header[0]).css("position", 'fixed');
  } else {
    angular.element(header[0]).css("top", '');
    angular.element(header[0]).css("position", '');
  }

The problem was that var clone = undefined , so I've changed it to: 问题是var clone = undefined ,所以我将其更改为:

var clone = header.prepend(header.clone().addClass('clone'), header);

This way I can find the clone position so that I can toggle the class based on the condition: pixelsFromTopScreen > clonePixelsPositionFromTop 这样,我可以找到克隆位置,以便可以根据以下条件切换类: pixelsFromTopScreen > clonePixelsPositionFromTop

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM