javascript - 滚动到某个位置后将导航设置为固定

标签 javascript jquery css flexbox bulma

我正在使用基于 Flexbox 的 CSS 框架设计着陆页 - Bulma .

我在全高部分下面创建了一个导航栏,我用它来滚动浏览各个部分,这取决于页面是否滚动到全高部分。 这是我用来添加/删除固定位置类的 JQuery 代码:

$(window).scroll(function () {
    if ($(window).scrollTop() > $('#cover').height()) {
        $('#navbar-sticky').addClass('is-fixed');
    }
    if ($(window).scrollTop() < $('#cover').height()) {
        $('#navbar-sticky').removeClass('is-fixed');
    }
});

我面临的问题是,当导航栏设置为 position: relative - 默认位置时,当单击指向某个部分的任何链接时,它会使用导航的高度“过度滚动”栏。

另一个问题是,当导航到第一部分时 - 在切换类的地方,还有一个过度滚动,我相信使用 if ($(window).scrollTop() >= $('#cover') .height())(大于或等于)解决了这个问题。

这是描述我的问题的相关代码笔 https://codepen.io/miraris/full/wrLdwN 我也在使用 smooth-scroll library在那个代码笔中,但这无关紧要,当它被删除时问题是一样的(只是没有偏移)。

最佳答案

当元素的位置更改为 Fixed 时,等于其高度的部分从 DOM 中释放出来,其下方的元素向上移动。

我们可以有一个包装器来填充由固定的导航栏创建的空间。

HTML

<div class="navbar-space-fill hidden"></div>
<div id="navbar-sticky">
.... your HTML ....
</div>

Javascript

在页面加载时-

$('.navbar-space-fill').css({'height':$('#navbar-sticky').height()});

当导航栏的位置固定时 -

$('.navbar-space-fill').removeClass('hidden');

否则-

$(".navbar-space-fill").addClass("hidden");

关于javascript - 滚动到某个位置后将导航设置为固定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46936587/

相关文章:

javascript - 使用 jQuery 将每个字符包装在 except 标签中

jquery - 根据评论密度更改 .accordion 面板的颜色

javascript - 为什么我的 jQuery when().then() 函数会在 ajax 请求完成之前触发?

html - Bootstrap 3 改变 Carousel 箭头

javascript - 使用 Bootstrap-Vue 创建复杂的面板

javascript - 如何获取正在加载html页面的页面路径?

javascript - 如何在 javascript 中为背景位置创建变量?

javascript - 如何使用基于值的 Javascript 更改颜色?

javascript - 如何在 JavaScript 条件语句中添加 CSS 'left' 属性?

javascript - 如何在 Angularjs 的其他文件中使用 Controller