【问题标题】:Shrink navbar AFTER cover image封面图片后缩小导航栏
【发布时间】:2017-11-19 17:53:33
【问题描述】:

我正在使用 Bootstrap 4 从头开始​​构建一个网站。这个想法是有一个全屏封面图像,顶部有一个“固定到位”的透明导航栏;这部分很简单,我几乎可以闭着眼睛做。我现在想要实现的是一种效果,因此当用户向下滚动并点击封面图像的末尾时,导航栏将缩小并在顶部保持粘性。

我找到了很多教程和指南来教如何在 Jquery 中执行此操作,但是它们基本上都提供了在“这么多像素”之后使其缩小的代码(在低于 50 的示例中) .我喜欢 Jquery 在一个类中添加然后删除该类的想法,但是我不确定如何修改以便它在到达封面图像的底部而不是 50 像素时激活。

$(window).scroll(function() {
  if ($(document).scrollTop() > 50) {
    $('nav').addClass('shrink');
  } else {
    $('nav').removeClass('shrink');
  }
});

【问题讨论】:

  • 尝试获取封面图片的底部位置并相应地更改您的代码。
  • @camelsWriteInCamelCase Errr 我认为这不是最好的方法。我的封面图片会延伸到您的显示器尺寸...所以每个人都会有不同的底部位置(取决于在他们的屏幕分辨率上)。
  • @user3599852 只需获取图像的高度,如果您达到以像素为单位的“高度”,则意味着您到达了底部(根据具体情况,您可能需要添加导航栏的高度)
  • @Kangouroops 就像我对上面提出相同建议的人所说的那样。这不是一个好的解决方案,因为图像被设置为覆盖整个屏幕,因此图像的高度会根据您的屏幕显示进行拉伸。这意味着每个人的图像高度都会根据屏幕的分辨率而有所不同。
  • @user3599852 这就是您使用 javascript 获得高度的原因。我说的不是原始图片的高度,而是渲染图片的高度。它可能在 window.load...

标签: jquery html css twitter-bootstrap navigation


【解决方案1】:

借助 jquery,您可以获得渲染图像的高度。

然后,您只需更改偏移参数。这是一支笔: https://codepen.io/anon/pen/KyQddz

<div class="navbar">
  This is my navbar
</div>
<figure>
  <img src="https://via.placeholder.com/350x80" />  
</figure>



* {
  margin: 0;
  padding:0;
  box-sizing: border-box;
}
.navbar {
  background: red;
  width: 100%;
  height: 60px;
  position: fixed;
  top:0;  
}
.shrink {
  background: green;
}
figure {
  height: 2000px;
}
img {
  display: block;
  width: 100%;
  height: auto;
}

var imgHeight;

$(window).on('load', function () {
  imgHeight = $('img').height();
});

$(window).scroll(function() {
  if ($(document).scrollTop() > imgHeight) {
    $('.navbar').addClass('shrink');
  } else {
    $('.navbar').removeClass('shrink');
  }
});

如果您希望仅在滚动图像高度后才修复导航栏,只需将 position:fixed;top:0; 移动到 .shrink 类。

.navbar {
      background: red;
      width: 100%;
      height: 60px; 
    }
    .shrink {
      background: green;
      position: fixed;
      top:0;
     }

【讨论】:

  • 这太完美了!谢谢,我已将您标记为最佳答案。我可以再打扰你一件事吗?是否可以将导航栏固定在顶部的位置,以便向下滚动时它不会在图像上移动?我有点希望它被修复,然后在它到达图像底部时变得粘稠。
  • @user3599852 你别打扰我,别担心。你的意思是,导航栏没有粘性,一旦你到达图像的底部,它就会变得粘性?
  • 非常感谢您迄今为止的帮助!如果我只是给你看一个例子可能会更容易 - cameronjhurley.com - 你会注意到这个网站上的菜单是如何固定在封面图像顶部的,然后一旦你向下滚动并越过图像,导航栏缩小并粘在网站的其余部分上。我想我知道如何使用 Bootstrap 来做到这一点,但我想我只是在征求第二意见哈哈..
  • 好吧,只需将position: fixed; top:0; 移动到.shrink 类。我会编辑我的答案
  • 很高兴能帮上忙 ;)
猜你喜欢
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多