2014-12-03 32 views
0

我试图让导航在黑色标题下方变为position: fixed。我非常确定JavaScript需要一些调整,但我不确定此时应该做什么。滚动时导航改为`position:fixed` X数量

这里的小提琴:http://jsfiddle.net/kgnkxemd/2/

HTML

<div> 
    <header></header> 
    <div></div> 
    <div></div> 
    <ul id="site-navigation"> 
     <li>nav 1</li> 
     <li>nav 2</li> 
     <li>nav 3</li> 
     <li>nav 4</li> 
    </ul> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
    <div></div> 
</div> 

CSS

div { 
    height: 100px 
} 
header { 
    background: #000; 
    height: 60px;  
    position: fixed; 
    top: 0; 
    width: 100%; 
} 
#site-navigation { 
    background: yellow; 
} 
#site-navigation li { 
    display: inline-block; 
} 
#site-navigation.fix-nav { 
    position: fixed; 
    top: 60px; 
    width: 100%; 
} 

JS

// Fixed nav 
var nav = $("#site-navigation"); 

nav.on("scroll", function(e) { 

    if (this.scrollTop > 60) { 
    nav.addClass("fix-nav"); 
    } else { 
    nav.removeClass("fix-nav"); 
    } 

}); 

回答

1

你接近,但有几个问题。

首先,您不希望将滚动事件绑定到导航,因为导航不在滚动;窗户是。所以你需要将滚动事件绑定到窗口。然后,你需要检查使用$(window).scrollTop()(或$(this).scrollTop()滚动事件中)窗口的滚动位置

$(window).on("scroll", function(e) { 
    if ($(this).scrollTop() > 60) { 
    nav.addClass("fix-nav"); 
    } else { 
    nav.removeClass("fix-nav"); 
    } 
}); 

在此进行这些更改的结果:http://jsfiddle.net/kgnkxemd/3/

+0

什么是'60'在JS代表什么?这是窗口必须滚动的总像素量吗?如果是这样,为什么它跳到[这里](http://jsfiddle.net/kgnkxemd/7/)?但是,当我将它更改为'45'时,它的效果就好像[here](http://jsfiddle.net/kgnkxemd/6/)。 – J82 2014-12-03 06:04:45

+0

是的,60代表屏幕上方60个像素。它在45中效果更好的原因是因为你希望它在碰到黑色条时变得固定。所以这个数字需要是黑色栏底部和黄色导航栏顶部之间的距离。其中,如果你测量它,是40px。 – 2014-12-03 06:21:16

+0

刚刚发现自己正确,因为你发布它:)谢谢你对此的帮助。 – J82 2014-12-03 06:22:17

0

scrolltop()是一个函数不是属性。像下面一样更新您的脚本。

jQuery(document).ready(function($){ 
var nav = $("#site-navigation"); 
    $(document).on("scroll", function(e) { 
    if ($(document).scrollTop() > 60) { 
     nav.addClass("fix-nav"); 
    } else { 
    nav.removeClass("fix-nav"); 
    }  
    });  
}); 

DEMO