javascript - 多个粘性 header - CSS/JavaScript/AngularJS

标签 javascript jquery css angularjs sticky

我试图为以下场景找到一些解决方案:

  1. 页眉高度完全不同
  2. 鼠标向下滚动
  3. 固定 header

有谁知道如何制作多个这样的粘性标题?

(1) 初始化

enter image description here

(2) 向下滚动(使用鼠标)

enter image description here

(3) 向下滚动(使用鼠标)

enter image description here

最佳答案

嗯...

DEMO

$(window).scroll(function() {
  var $headers = $(".header");
  var scrollTop = $(this).scrollTop();

  if (scrollTop <= 0) {
    // reset all
    $headers.css({
      position: "relative",
      top: "0px"
    });
  } else {
    $headers.each(function(index, $el) {

      var $curHeader = $($headers).eq(index);
      var curTop = $curHeader.offset().top;
      var curHeight = $curHeader.height();

      // scroll up
      var isRelative = ($el.isFixed && scrollTop <= $el.exTop);

      // scroll down
      var isFixed = (curTop <= scrollTop);

      var position = "";
      var top = 0;

      if (isRelative) {
        // reset
        positon = "relative";
        top = 0;

        $el.isFixed = false;
      } else if (isFixed) {
        position = "fixed";
        if (0 < index) {
          for (var i = 0; i < index; i++) {
            top += $($headers).eq(i).height();
          }
        }
        scrollTop += curHeight;

        if (!$el.isFixed) {
          $el.isFixed = true;
          $el.exTop = curTop;
        }
      }

      $($el).css({
        position: position,
        top: top + "px"
      });
    });
  }
});
body {
  height: 10000px;
}
div {
  height: 200px;
  background: gray;
  width: 100%;
}

.header {
  height: 50px;
  background: green;
}

div.header:nth-child(7) {
  height: 100px;
}
<!DOCTYPE html>
<html>

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <meta charset="utf-8">
    <title>JS Bin</title>
</head>

<body>
    <div>content 0</div>
    <div class="header">header 1</div>
    <div>content 1</div>
    <div class="header">header 2</div>
    <div>content 2</div>
    <div class="header">header 3</div>
    <div>content 3</div>
</body>

</html>

关于javascript - 多个粘性 header - CSS/JavaScript/AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29530185/

相关文章:

javascript - 如何预览多个输入

javascript - 如何检查数组中的值是否存在于 jquery/javascript 中的数组中

javascript - 如何将计算器运算元素转换为字符串得到解,然后将解返回给元素?

html - 使用 CSS 在密码字段中圈出

javascript - 全宽图像 slider

php - 拒绝没有启用 javascript 的浏览器使用我的 php 站点

javascript - Javascript 中的 ERR_INSECURE_RESPONSE 处理提示

php - 如何以不同于其他帖子的方式显示第一篇帖子?

javascript - 当输入不是连续的时将字符串转换为整数

javascript - 寻址 JSON 数组中的对象