用JavaScript写随鼠标滚动的导航条

269 阅读1分钟

实现效果:

1.滚动鼠标滑轮,到达上方导航条时,上方导航条固定在最上面,如果不超过不固定
2.快到最左端导航条时,左端导航条固定在左边
3.在这些之外范围,左端导航条和上方导航条恢复原样。

在这里插入图片描述

实现过程:

1.获得最上方header的高度,(header之下是导航条nav2.当鼠标滚动超过这个高度时,让导航条的位置固定在最上方
3.继续滑动鼠标,当窗口上方到达做导航条上方一定距离时(这里是120px)
   让左导航条固定。(这里是top:120px;  left:100px4.当没有在这些范围内,所有导航条恢复原位置。

实现细节:

1. position: fixed; /*固定位置但会脱离标准文档流*/
2. pageXOffset 和 pageYOffset 属性返回文档在窗口左上角水平和
  垂直方向滚动的像素。
3. var scrollTop = document.body.scrollTop; 在谷歌浏览器中不行,
 Microsoft edge中可以360浏览器中也可以,
4.var scrollTop = document.documentElement.scrollTop; //在谷歌浏览器
中可以,IE浏览器中也行,Microsoft edge不可以。
5.所有主流浏览器都支持 pageXOffset 和 pageYOffset 属性。注意:
 IE 8 及 更早 IE 版本不支持该属性,但可以使用document.documentElement.scrollLeft和document.documentElement.scrollTop属性 。
6.兼容写法:var scrollTop = window.pageYOffset ||  document.documentElement.scrollTop || document.body.scrollTop || 0;
7.vertical-align: top;——垂直对齐文本顶部

代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>随鼠标滚动的导航条</title>
	<style>
		*{
			padding: 0;
			margin: 0;
		}
		 .main{
		 	 width:1385px;
		 	 margin: 0 auto;
		 }
		 div img{
		 	vertical-align: top;
		 }
		 .fix{
		 	position: fixed;
		 	top: 0;
		 }
		 .leftNav{
		 	position: absolute;
		 	top: 1100px;
		 	left: 100px;
		 }
		 .leftNavFix{
		 	position: fixed; /*固定位置会脱离标准文档流*/
		 	top: 120px;
		 	left: 100px;
		 }
	</style>
	<script>
		window.onload = function(){
		var head = document.getElementsByClassName('header')[0];
		var nav = document.getElementById('nav');
		var leftNav = document.getElementById('leftNav');
		var leftTop = leftNav.offsetTop;
		window.onscroll = function(){
			 var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
			 if(scrollTop >= head.offsetHeight){
			 	nav.className = 'fix';
			 }else{
			 	nav.className = 'nav';
			 }
			 if(scrollTop >= leftTop-120){
			 	leftNav.className = 'leftNavFix';
			 }else{
			 	leftNav.className = 'leftNav';
			 }
		} 
	}
	</script>
</head>
<body>
	  <div class="main">
	  	  <div class="header">
	  	  	<img src="imgs/header.jpg" alt="">
	  	  </div>
	  	  <div class="nav" id="nav">
	  	  	<img src="imgs/nav.jpg" alt="">
	  	  </div>
	  	  <div class="bd">
	  	  	  <img src="imgs/bd.jpg" alt="">
	  	  	  <img src="imgs/leftNav.jpg" alt="" class="leftNav" id="leftNav">
	  	  </div>
	  </div>
</body>
</html>