2016-11-24 88 views
1

我试图让页面顶部滚动页面顶部的导航栏。如何在图像之后将导航栏粘贴到页面的顶部?

所以这将是类似的东西,codepen.io,但有一张照片。因此,在图片上,它会延伸到屏幕的大部分区域,但也会根据窗口的大小进行调整。因此,我不能在200像素后面说出,因为图像的大小会有所不同。如果可能的话,有没有一种方法可以创建一个Javascript函数,一旦注册到任何元素的底部,navbar将会粘住?

HTML:

<header> 
    <img src="https://upload.wikimedia.org/wikipedia/commons/d/de/Mount_Shuksan,_Picture_Lake_(2362739742).jpg" alt=""> 
    </header> 

    <nav id = "nav_bar"> 
     <ul class = "navbar-list"> 
      <li> 
       <a href="">link1</a> 
      </li> 
      <li class="dropdown"> 
       <a href="#" class="dropbtn">link2</a> 
        <div class="dropdown-content"> 
         <a href="#">link 1</a> 
         <a href="#">link 2</a> 
         <a href="#">link 3</a> 
         <a href="">link 4</a> 
        </div> 
      </li> 
      <li> 
       <a href="">link 3</a> 
      </li> 
      <li> 
       <a href="">link4</a> 
      </li> 
     </ul> 
    </nav> 

<body> 

<p> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
</p> 

<p> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
</p> 

<p> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
</p> 

<p> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
</p> 

<p> 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
</p> 

CSS:

body{ 
margin:0px; 
} 

header{ 
margin: 0 auto; 
/*position: fixed;*/ 
top: 0; 
} 


img{ 
max-width: 100%; 
text-align: center; 
top: 0; 
display: block; 
} 

.navbar-fixed { 
top: 0; 
z-index: 100; 
position: fixed; 
width: 100%; 
} 


ul { 
list-style-type: none; 
margin: 0; 
padding: 0; 
overflow: hidden; 
background-color: #333; 
} 

li { 
float: left; 
} 

li a, .dropbtn { 
display: inline-block; 
color: white; 
text-align: center; 
padding: 14px 16px; 
text-decoration: none; 
} 

li a:hover, .dropdown:hover .dropbtn { 
background-color: red; 
} 

li.dropdown { 
display: inline-block; 
} 

.dropdown-content { 
display: none; 
position: absolute; 
background-color: green; 
min-width: 160px; 
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); 
} 

.dropdown-content a { 
color: black; 
padding: 12px 16px; 
text-decoration: none; 
display: block; 
text-align: left; 
} 

.dropdown-content a:hover {background-color: #f1f1f1} 

.dropdown:hover .dropdown-content { 
display: block; 
} 

codepen.io - 包括样品图像

+0

哪些错误与codepen?这似乎是做你的事后,我错过了什么? – Keith

+0

在我的代码笔中,在帖子底部的那个,导航栏不会在图像滚动过去后粘到页面的顶部。 – CatTreats

回答

1

这样的事情

var nav_bar_top_offset = $('#nav_bar').offset().top; 
 

 
$(window).scroll(function() { 
 
    if ($(this).scrollTop() > nav_bar_top_offset) { 
 
     $('#nav_bar').addClass('fixed'); 
 
    } else { 
 
    $('#nav_bar').removeClass('fixed'); 
 
    } 
 
});
body { 
 
    margin: 0px; 
 
} 
 
header { 
 
    margin: 0 auto; 
 
    /*position: fixed;*/ 
 
    top: 0; 
 
} 
 
section{background:#fff} 
 
img { 
 
    max-width: 100%; 
 
    text-align: center; 
 
    top: 0; 
 
    display: block; 
 
} 
 
.navbar-fixed { 
 
    top: 0; 
 
    z-index: 100; 
 
    position: fixed; 
 
    width: 100%; 
 
} 
 
ul { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    overflow: hidden; 
 
    background-color: #333; 
 
} 
 
li { 
 
    float: left; 
 
} 
 
li a, 
 
.dropbtn { 
 
    display: inline-block; 
 
    color: white; 
 
    text-align: center; 
 
    padding: 14px 16px; 
 
    text-decoration: none; 
 
} 
 
li a:hover, 
 
.dropdown:hover .dropbtn { 
 
    background-color: red; 
 
} 
 
li.dropdown { 
 
    display: inline-block; 
 
} 
 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: green; 
 
    min-width: 160px; 
 
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 
 
} 
 
.dropdown-content a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 
    text-align: left; 
 
} 
 
.dropdown-content a:hover { 
 
    background-color: #f1f1f1 
 
} 
 
.dropdown:hover .dropdown-content { 
 
    display: block; 
 
} 
 
.fixed{ 
 
    position:fixed; 
 
    top:0; 
 
    width:100%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<header> 
 
    <img src="https://upload.wikimedia.org/wikipedia/commons/d/de/Mount_Shuksan,_Picture_Lake_(2362739742).jpg" alt=""> 
 
    </header> 
 

 
<nav id="nav_bar"> 
 
    <ul class="navbar-list"> 
 
    <li> 
 
     <a href="">link1</a> 
 
    </li> 
 
    <li class="dropdown"> 
 
     <a href="#" class="dropbtn">link2</a> 
 
     <div class="dropdown-content"> 
 
     <a href="#">link 1</a> 
 
     <a href="#">link 2</a> 
 
     <a href="#">link 3</a> 
 
     <a href="">link 4</a> 
 
     </div> 
 
    </li> 
 
    <li> 
 
     <a href="">link 3</a> 
 
    </li> 
 
    <li> 
 
     <a href="">link4</a> 
 
    </li> 
 
    </ul> 
 
</nav> 
 

 
<p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 
</section>

+0

首先,感谢您花时间做到这一点。但是我想知道如果没有在背景中制作图像,是否有办法做到这一点?就像导航栏上方的图像一样,导航栏将“粘贴”到顶部。 – CatTreats

+0

@CatTreats我已经更新了我的答案,看看 –

+0

这显然是我的答案的副本。 – Ionut

0

我想你正在努力实现的就是这个。希望会帮助你。点击Run code snippet即可看到它在运作。你检查

首先,当你达到你想在滚动时保持固定的元素,并添加fixed类,然后如果你回滚你删除它。

var navBarOffset = $('#nav_bar').offset().top; 
 

 
$(window).scroll(function() { 
 
    var navBar= $('#nav_bar'); 
 
    var scroll = $(window).scrollTop(); 
 

 
    if (scroll >= navBarOffset) { 
 
    navBar.addClass('fixed'); 
 
    } else { 
 
    navBar.removeClass('fixed'); 
 
    } 
 
});
body { 
 
    margin: 0px; 
 
} 
 
header { 
 
    margin: 0 auto; 
 
    /*position: fixed;*/ 
 
    top: 0; 
 
} 
 
.fixed { 
 
    position: fixed; 
 
    top:0; 
 
    left:0; 
 
    width: 100%; 
 
} 
 
img { 
 
    max-width: 100%; 
 
    text-align: center; 
 
    top: 0; 
 
    display: block; 
 
} 
 
.navbar-fixed { 
 
    top: 0; 
 
    z-index: 100; 
 
    position: fixed; 
 
    width: 100%; 
 
} 
 
ul { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    overflow: hidden; 
 
    background-color: #333; 
 
} 
 
li { 
 
    float: left; 
 
} 
 
li a, 
 
.dropbtn { 
 
    display: inline-block; 
 
    color: white; 
 
    text-align: center; 
 
    padding: 14px 16px; 
 
    text-decoration: none; 
 
} 
 
li a:hover, 
 
.dropdown:hover .dropbtn { 
 
    background-color: red; 
 
} 
 
li.dropdown { 
 
    display: inline-block; 
 
} 
 
.dropdown-content { 
 
    display: none; 
 
    position: absolute; 
 
    background-color: green; 
 
    min-width: 160px; 
 
    box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 
 
} 
 
.dropdown-content a { 
 
    color: black; 
 
    padding: 12px 16px; 
 
    text-decoration: none; 
 
    display: block; 
 
    text-align: left; 
 
} 
 
.dropdown-content a:hover { 
 
    background-color: #f1f1f1 
 
} 
 
.dropdown:hover .dropdown-content { 
 
    display: block; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<header> 
 
    <img src="https://upload.wikimedia.org/wikipedia/commons/d/de/Mount_Shuksan,_Picture_Lake_(2362739742).jpg" alt=""> 
 
</header> 
 

 
<nav id="nav_bar"> 
 
    <ul class="navbar-list"> 
 
    <li> 
 
     <a href="">link1</a> 
 
    </li> 
 
    <li class="dropdown"> 
 
     <a href="#" class="dropbtn">link2</a> 
 
     <div class="dropdown-content"> 
 
     <a href="#">link 1</a> 
 
     <a href="#">link 2</a> 
 
     <a href="#">link 3</a> 
 
     <a href="">link 4</a> 
 
     </div> 
 
    </li> 
 
    <li> 
 
     <a href="">link 3</a> 
 
    </li> 
 
    <li> 
 
     <a href="">link4</a> 
 
    </li> 
 
    </ul> 
 
</nav> 
 

 
<body> 
 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 
    <p> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
    in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </p> 
 

 

 
</body> 
 
<footer> 
 

 
</footer>

1

就像你使用的教程Codepen,只是改变的例子的选择你的选择。

试试这个:

var mn = $("#nav_bar"); 
    mns = "navbar-fixed"; 
    hdr = $('header').height(); 

$(window).scroll(function() { 
    if($(this).scrollTop() > hdr) { 
    mn.addClass(mns); 
    } else { 
    mn.removeClass(mns); 
    } 
}); 

这里的codepen


记住:如果您设置导航栏,以粘,在那里有将要删除的导航栏的空间。因此,您的导航栏可能会出现在您的第一行文字上。只需在您的标题中添加导航栏高度的填充即可。这也可以在你的js中完成。

要么你加个班这个填充或者你手动添加。下面是例子:

$('header').addClass("extraPadding"); // extraPadding is the class that you have to create 

$('header').css("padding-bottom", "40"); // 40 could be the height of your navbar 
0
var nav = $('.adjustlink'); 
    var pos = nav.offset().top; 

    $(window).scroll(function(){ 
     var fix = ($(this).scrollTop() > pos) ? true : false; 
     nav.toggleClass("fix-nav", fix); 
    }); 

希望这个帮你fiddle

+0

对你有帮助吗? –

相关问题