先来看一下效果:
代码部分:
html
为展示效果方便,用三张图片代替,愿谅解。
<div class="top"> <img src="images/top.png" /> </div> <div class="nav"> <img src="images/nav.png" /> </div> <div class="main"> <img src="images/main.png" /> </div> </body>
css:
<style type="text/css"> * { margin: 0; padding: 0; } .main { width: 1000px; margin: 0 auto; } </style>
jQuery:
<script src="jquery-1.12.2.js"></script> <script> $(function(){ //window对象触发滚动事件 $(window).scroll(function(){ if($(document).scrollTop() >= $(".top").height()){ // console.log("超过了"); $(".nav").css({"position":"fixed","top":0}); $(".main").css("marginTop",$(".nav").height()); }else{ $(".nav").css("position","static"); $(".main").css("marginTop",0); } }); }); </script>
总体代码->便于复制粘贴
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>固定导航栏</title> <style type="text/css"> * { margin: 0; padding: 0; } .main { width: 1000px; margin: 0 auto; } </style> <script src="jquery-1.12.2.js"></script> <script> $(function(){ //window对象触发滚动事件 $(window).scroll(function(){ if($(document).scrollTop() >= $(".top").height()){ // console.log("超过了"); $(".nav").css({"position":"fixed","top":0}); $(".main").css("marginTop",$(".nav").height()); }else{ $(".nav").css("position","static"); $(".main").css("marginTop",0); } }); }) </script> </head> <body> <div class="top"> <img src="images/top.png" /> </div> <div class="nav"> <img src="images/nav.png" /> </div> <div class="main"> <img src="images/main.png" /> </div> </body> </html>
总结 1.分析:当滚轮划出距离超过固定栏上面元素的总高度时,让滚动栏固定。当距离小于高度时,让滚动栏恢复正常状态。 2.注意问题:当把固定栏设成fixed时脱标,下面的元素会网上冲,网上移动的距离为固定栏的高度。 3.window对象触发滚动事件。 4.滚动事件:scroll()。 5.获取滚动的距离:上距离:scrollTop() 左距离scrollLeft()。 6.获取元素宽高:width()方法和height()方法。 7.固定栏定位属性为fixed固定,static恢复正常。 8.本人也刚刚入门若上述代码及表述有误,望看到的大佬及时指出并纠正,定虚心求教。