粘性导航栏 - Bootstrap

Sticky navbar - Bootstrap

我想在我的网站上有一个粘性导航栏,它应该在用户滚动到页眉后粘在页面顶部。

我有这个代码:http://jsfiddle.net/df8tb/1849/

这里是主要代码:

.goToTop {
  position: fixed;
  top: 0;
  height: 70px;
  z-index: 1;
}


$(document).ready(function(){
  $(window).bind('scroll', function() {
    var navHeight = 100; // custom nav height
    ($(window).scrollTop() > navHeight) ? $('nav').addClass('goToTop') : $('nav').removeClass('goToTop');
  });
});

但实际上并没有用。

我的问题是如何解决当用户滚动时出现 'jumping'(内容上升)的行为?

不要在滚动 "navBar height" 时粘贴导航栏,而是在滚动 "header" 高度(或 header 高度加上其填充 + 边距)时执行此操作

看这里: http://jsfiddle.net/augburto/df8tb/1851/

您需要解决两个主要问题。

有一件事是您的 navHeight 不是导航的确切位置。您想要的是 nav 相对于视口顶部的位置。你可以通过这样做来做到这一点。

var navTop = $('#nav').offset().top;

我更改了命名约定,因为更准确地说是 navTop 而不是高度。

内容跳转的另一个问题是,当您将导航设置为 position: fixed 时,它会脱离文档流。解决这个问题的一种方法是计算 nav 的实际高度,然后设置位置以在导航卡住时将其偏移那么多。

var navHeight = $('#nav').height();
$('#content').css('top', navHeight);

你的造型应该是这样的。
.goToTop { 位置:固定; 顶部:0; 高度:70px; width:100%;<br> z-指数:2000; }
为什么我将 z-index 更改为 2000 是因为 bootstrap 为某些元素分配了 1000、1020 等的 z-index。所以如果你想要这个最重要的是,你的 z-index 应该是 2000.

你的脚本应该是这样的
$(document).ready(function(){ $(window).scroll(function(){ var navHeight = 100; if($(this).scrollTop() > navHeight ){ $('nav').addClass('goToTop'); } else{ $('nav').removeClass('goToTop'); } }); });

因为您将 nav 更改为 fixed,所以它不再有碰撞(布局,无论如何)。所以我们需要补偿额外的space。我们可以通过填充您的内容的顶部来做到这一点。

.addSpace {
    padding-top : 60px;
}

现在我们所要做的就是更新你的 JavaScript 把这个 class 放到你想要填充的东西上:

$(document).ready(function () {
    $(window).bind('scroll', function () {
        var navHeight = 100; // custom nav height
        if ($(window).scrollTop() > navHeight) {
            $('nav').addClass('goToTop');
            $('#content').addClass('addSpace');
        } else {
            $('nav').removeClass('goToTop');
            $('#content').removeClass('addSpace');
        }
    });
});

works perfectly! (我在内容元素中添加了一个 #content id,但是你可以使用任何你能想到的选择器)。