我需要快速搭建 Twitter Bootstrap 的主导航和子导航的功能,例如:http://twitter.github.com/bootstrap/scaffolding.html (当您滚动时,子导航固定在主导航上)。
是否有人已经实现了这个功能或者有相关的教程呢?
我需要快速搭建 Twitter Bootstrap 的主导航和子导航的功能,例如:http://twitter.github.com/bootstrap/scaffolding.html (当您滚动时,子导航固定在主导航上)。
是否有人已经实现了这个功能或者有相关的教程呢?
这是我实现该功能的代码:
$(document).scroll(function(){
// If has not activated (has no attribute "data-top"
if (!$('.subnav').attr('data-top')) {
// If already fixed, then do nothing
if ($('.subnav').hasClass('subnav-fixed')) return;
// Remember top position
var offset = $('.subnav').offset()
$('.subnav').attr('data-top', offset.top);
}
if ($('.subnav').attr('data-top') - $('.subnav').outerHeight() <= $(this).scrollTop())
$('.subnav').addClass('subnav-fixed');
else
$('.subnav').removeClass('subnav-fixed');
});
$('.subnav').outerHeight()
的目的是什么?这是为了允许额外的主导航吗?我假设offset.top
已经是元素的顶部了? - ForbesLindesayif ($('.subnav').attr('data-top') - $('.subnav').outerHeight() <= ...
жӣҝжҚўдёә if ($('.subnav').attr('data-top') + $('.subnav').outerHeight() <= ...
пјҢд»ҘйҒҝе…ҚйЎөйқўй«ҳеәҰдёҚи¶іж—¶еҮәзҺ°ж•…йҡңгҖӮ - Matthieu Napoli截至2012年12月04日,被接受的答案已经不再是最佳选择,因为所需功能已包含在Bootstrap中。 请参见Bootstrap JS的一部分,Affix JavaScript组件
来自@Oleg的出色答案,
对于像我这样想要重现 .subnav 响应行为的人
这里是 CSS 代码(不包括颜色、边框和效果)
body { padding-top: 90px; }
@media (max-width: 980px) {
body {
padding-top: 0;
}
}
.subnav {
width: 100%;
}
@media (max-width: 768px) {
.subnav {
position: static;
top: auto;
z-index: auto;
width: auto;
height: auto;
}
.subnav .nav > li {
float: none;
}
}
@media (min-width: 980px) {
.subnav-fixed {
position: fixed;
top: 40px;
left: 0;
right: 0;
z-index: 1020;
}
.subnav-fixed .nav {
width: 938px;
margin: 0 auto;
}
}
@media (min-width: 1210px) {
.subnav-fixed .nav {
width: 1168px;
}
}
如果您想克隆菜单的样式(包括颜色、边框和效果),请参考以下链接:http://jsfiddle.net/baptme/ydY6W/。这里是另一段代码
$(function(){
var
$win = $(window),
$filter = $('.navbar'),
$filterSpacer = $('<div />', {
"class": "filter-drop-spacer",
"height": $filter.outerHeight()
});
$win.scroll(function(){
if(!$filter.hasClass('navbar-fixed-top')){
if($win.scrollTop() > $filter.offset().top){
$filter.before($filterSpacer);
$filter.addClass("navbar-fixed-top");
}
}else if ($filter.hasClass('navbar-fixed-top')){
if($win.scrollTop() < $filterSpacer.offset().top){
$filter.removeClass("navbar-fixed-top");
$filterSpacer.remove();
}
}
});
});