滚动时,将菜单栏固定在顶部

Wil*_*son 69 css jquery

我见过一些网站,当用户向下滚动页面时,会弹出一个右侧或左侧的框...

此外,注意到这个模板:http://www.mvpthemes.com/maxmag/设计师做得很好,导航栏固定在顶部.

现在,这些是如何完成的?我猜它使用jquery来获取页面的位置并显示框.

你能指导我到哪里可以找到一个片段,这样我就能学会做那样的事情.

ada*_*amb 151

通常通过使用一些jquery逻辑来实现此效果,如下所示:

$(window).bind('scroll', function () {
    if ($(window).scrollTop() > 50) {
        $('.menu').addClass('fixed');
    } else {
        $('.menu').removeClass('fixed');
    }
});
Run Code Online (Sandbox Code Playgroud)

这表示一旦窗口滚动超过一定数量的垂直像素,它就会在菜单中添加一个类,将其位置值更改为"固定".

有关完整的实现细节,请参阅:http://jsfiddle.net/adamb/F4BmP/

  • 你不能通过做类似的事来缩短它:`$('.menu').toggleClass('fixed',$(window).scrollTop()> 50);`? (10认同)
  • @MichaelCalkins是的(另一个是:`$('.menu')[($(window).scrollTop()> num?'add':'remove')+'Class']('fixed');`)但我认为它的编写方式允许最大的可读性. (3认同)

Tom*_*lez 20

在此示例中,您可以显示菜单居中.

HTML

<div id="main-menu-container">
    <div id="main-menu">
        //your menu
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.f-nav{  /* To fix main menu container */
    z-index: 9999;
    position: fixed;
    left: 0;
    top: 0;
    width: 100%;
}
#main-menu-container {
    text-align: center; /* Assuming your main layout is centered */
}
#main-menu {
    display: inline-block;
    width: 1024px; /* Your menu's width */
}
Run Code Online (Sandbox Code Playgroud)

JS

$("document").ready(function($){
    var nav = $('#main-menu-container');

    $(window).scroll(function () {
        if ($(this).scrollTop() > 125) {
            nav.addClass("f-nav");
        } else {
            nav.removeClass("f-nav");
        }
    });
});
Run Code Online (Sandbox Code Playgroud)


mar*_*osm 15

与adamb相同,但我会添加一个动态变量num

num = $('.menuFlotante').offset().top;
Run Code Online (Sandbox Code Playgroud)

获取窗口内的确切偏移或位置,以避免找到正确的位置.

 $(window).bind('scroll', function() {
         if ($(window).scrollTop() > num) {
             $('.menu').addClass('fixed');
         }
         else {
             num = $('.menuFlotante').offset().top;
             $('.menu').removeClass('fixed');
         }
    });
Run Code Online (Sandbox Code Playgroud)

  • 这很好,因为它避免了其他示例中发生的常见错误.Chrome有时会在<body>和第一个<div>之间添加一个愚蠢和无意义的差距,通常是<div>的高度.谢谢. (2认同)

小智 14

您还可以使用css规则:

position: fixed ;top: 0px ;

在您的菜单标签上.

  • @PseudoNinja是的但是如果你看看Wilson提供的页面作为一个例子,当用户滚过它的相对位置时,菜单栏只是"固定".仅在CSS中无法实现这一点. (10认同)
  • 这是正确的方法.让CSS做它想做的事情.在JQuery中添加功能会给项目增加不必要的批量. (6认同)

小智 7

或者以更动态的方式执行此操作

$(window).bind('scroll', function () {
    var menu = $('.menu');
    if ($(window).scrollTop() > menu.offset().top) {
        menu.addClass('fixed');
    } else {
        menu.removeClass('fixed');
    }
});
Run Code Online (Sandbox Code Playgroud)

在 CSS 添加类

.fixed {
    position: fixed;
    top: 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 需要是 `&gt;=` 而不是 `&gt;` 否则菜单会在滚动时在固定之间跳进和跳出。 (4认同)