javascript - 带有视差横幅的粘性导航

标签 javascript jquery css

我正在开发一个模拟服装网站。我有一个视差横幅和它下面的导航。我想要实现的是,一旦用户真正滚动过导航,导航就会停留在页面顶部。我能够让导航固定在页面顶部,但它仍然在横幅图片上。

这是 CSS

.banner {
  background-image: url('https://images.pexels.com/photos/896291/pexels-photo-896291.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260');
  background-size: cover;
  min-height: 100%;
  background-attachment: fixed;
}

nav {
  border-top: solid #000 1px;
  background-color: #fff;
  padding: 5px;
  margin: 0 0 50px 0;
}

.sticky {
    position: fixed;
    width: 100%;
    top:0;
    border-bottom: solid black 1px;
    box-shadow: 0 2px 5px dimgray;

}

这是 jQuery

    $(window).on('scroll', function() {
if($(window).scrollTop()) {
    $('nav').addClass('sticky');
} else {
    $('nav').removeClass('sticky');
}
})

And here's my fiddle 展示问题。

关于为什么会发生这种情况,我有一些理论。

一开始我以为可能是因为我的 top 设置为 0,但是当我更改值时它仍然触发了 .sticky,但只是 float 在页面中间。

然后我想,也许是因为我将 scrollTop() 附加到窗口。我试过像这样将它附加到导航

if($('nav').scrollTop()) {
   //add class
 }

那也没用。

提前感谢你们可能有的任何见解!

最佳答案

首先,您必须检查滚动顶部是否大于应该滚动到顶部的值。如果你这样做了,你应该能够向该元素添加一个类或删除它。 示例:

var slide = $('yourIdOrClassName').offset().top;
$(window).on('scroll', function() {
  if($(window).scrollTop() > slide) {
     $('nav').addClass('sticky');
  } else {
  $('nav').removeClass('sticky');
  }
});

您将需要一个具有 display: none; 属性的类和一个具有 display: block; 属性的类

display: none; 的属性表示该元素不会显示在页面上。 display: block 是 nav/div 元素的默认显示属性。

关于javascript - 带有视差横幅的粘性导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50050713/

相关文章:

javascript - 是否有 JavaScript 性能比较图表可用?

php - 在 JavaScript 中处理 AJAX 调用的 PHP 返回的数据

javascript - jquery 慢慢追加 span

jquery - 如何使用 jQuery 在多选列表中选择选项?

css - 样式不适用于 react 引导导航栏

javascript - 如何限制在我的网站上完成考试的持续时间

javascript - 配置 eclipse 以将 .sah 扩展名视为 .js 扩展名

javascript - 调用栈增加javascript

jquery - 使用 jQuery 将 css 类添加到动态按钮

css - 仅 HTML5 中的表格单元格 <td> 顶部和底部填充 - 它来自哪里?