javascript - 为什么固定 block 在滚动时闪烁?

标签 javascript jquery html css

我需要在底部创建标题,并在用户滚动时将其固定在顶部。

为什么当我滚动固定标题时会闪烁?

这是一段代码:

$(document).scroll(function () {
	var bodyTop = $('body').scrollTop();
	var navOffset = $('.main-nav').offset().top;
	$('.main-nav').toggleClass('header-fixed', (bodyTop > navOffset));
});
.wrapper { height: 99000px; }
.header-fixed { 
      position: fixed !important; top: 0 !important; 
      bottom: none; background: yellow !important; }
 .main-nav { width: 100%; height: 72px; position: absolute; bottom:0; background: blue;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
    <nav class="main-nav">
    </nav>
</div>

https://jsfiddle.net/u3kk219d/

最佳答案

我已经将元素的 offsetTop 的计算移到了滚动之外,它只需要计算一次。通过这样做,它不会在您每次滚动时都进行奇怪的计算,并且可以修复闪烁。

var navOffset = $('.main-nav').offset().top;

$(document).on("scroll", function() {
  var bodyTop = $('body').scrollTop();
  $(".main-nav").toggleClass("header-fixed", (bodyTop > navOffset));
});
.wrapper {
  height: 99000px;
}

.header-fixed {
  position: fixed !important;
  top: 0 !important;
  background: yellow !important;
}

.main-nav {
  width: 100%;
  height: 72px;
  position: absolute;
  bottom: 0;
  background: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
  <nav class="main-nav">
  </nav>
</div>

关于javascript - 为什么固定 block 在滚动时闪烁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642182/

相关文章:

jquery - 如何在表单中实现类似 Stack Overflow 的水印?

html - CSS 背景和水平滚动条

javascript - 如何选择jstree中的根节点?

javascript - 如何以百分比形式显示ajax响应的加载状态?

html - @font-face 中的自定义字体不起作用

javascript - JQueryUI - 同时向左/向右滑动 div

javascript - ES6 导入别名部分导出而不是全部

javascript - 如何在 jQuery 中做到这一点?

javascript - 模拟背景: cover; with fixed values?

javascript - vue.js CLI 应用程序中的 <b-list-group-item> 未呈现 bootstrap-vue