scroll和offset案例

1.固定导航栏

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				padding: 0;
				margin: 0;
			}
		    img{
				vertical-align: top;
			}
			.main{
				margin: 0 auto;
				width: 1000px;
				margin-top: 5px;
			}
			.fixed{
				position: fixed;
				left: 0;
				top: 0;
			}
		</style>
	</head>
	<body>
		<div class="top">
			<img src="images/top.png" alt=""/>
		</div>
		<div class="nav">
			<img src="images/nav.png" />
		</div>
		<div class="main">
			<img src="images/main.png" />
		</div>
		<script>
			window.onload=function(){
				var top=document.getElementsByClassName("top")[0];
				var height = top.offsetHeight;
				var nav=document.getElementsByClassName("nav")[0];
				var main=document.getElementsByClassName("main")[0];
				window.onscroll=function(){
					if(scroll().top>height){
						nav.className="fixed";
						main.style.paddingTop=nav.offsetHeight+"px";
					}else{
						nav.className="";
						main.style.paddingTop=0;
					}
				}
			}
			
			function scroll(){
				if(window.pageYOffset!==undefined){
					var json={
						"top":window.pageYOffset,
						"left":window.pageXOffset
					}
					return json;
				}else if(document.compatMode=="CSS1Compat"){
					var json={
						"top":document.documentElement.scrollTop,
						"left":window.documentElement.scrollLeft
					}
					return json;
				}else{
					var json={
						"top":document.body.scrollTop,
						"left":window.body.scrollLeft
					}
					return json;
				}
			}
		</script>
	</body>
</html>

2.两侧跟随广告

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.img1{
				position: absolute;
				top: 80px;
				left: 10px;
			}
			.img2{
				position: absolute;
				top: 80px;
				right: 10px;
			}
			div{
				height: 2000px;
			}
		</style>
	</head>
	<body>
		<img class="img1" src="images/aside.jpg" />
		<img class="img2" src="images/aside.jpg" />
		<div>
			
		</div>
		<script>
			var imgArr=document.getElementsByTagName("img");
			window.onscroll=function(){
				var val=scroll().top;
				animate(imgArr[0],val+80);
				animate(imgArr[1],val+80);
			}
			
			//缓动动画封装
			function animate(ele,target){
				clearInterval(ele.timer);
				ele.timer=setInterval(function(){
					var step=(target-ele.offsetTop)/10;
					step=step>0?Math.ceil(step):Math.floor(step);
					ele.style.top=ele.offsetTop+step+"px";
					if(Math.abs(target-ele.offsetTop)<=Math.abs(step)){
						ele.style.top=target+"px";
						clearInterval(ele.timer);
					}
				},30)
			}
			
			//封装scrollTop
			function scroll() {  // 开始封装自己的scrollTop
			    if(window.pageYOffset != null) {  // ie9+ 高版本浏览器
			        // 因为 window.pageYOffset 默认的是  0  所以这里需要判断
			        return {
			            left: window.pageXOffset,
			            top: window.pageYOffset
			        }
			    }
			    else if(document.compatMode === "CSS1Compat") {    // 标准浏览器   来判断有没有声明DTD
			        return {
			            left: document.documentElement.scrollLeft,
			            top: document.documentElement.scrollTop
			        }
			    }
			    return {   // 未声明 DTD
			        left: document.body.scrollLeft,
			        top: document.body.scrollTop
			    }
			}
		</script>
	</body>
</html>

3.返回头部小箭头
被卷去的头部超过100显示小火箭,然后点击小火箭屏幕缓慢移动到最顶端。我们以前是移动盒子,现在是移动屏幕,我们没有学过如何移动屏幕。 技术点:window.scrollTo(x,y);浏览器显示区域跳转到指定区域

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			img{
				position: fixed;
				bottom: 100px;
				right: 50px;
				cursor: pointer;
				display: none;
			}
			div{
				height: 2000px;
			}
		</style>
	</head>
	<body>
		<img src="images/Top.jpg" />
		<div></div>
		<script>
			window.onload=function(){
				var img=document.getElementsByTagName("img")[0];
				window.onscroll=function(){
					if(scroll().top>200){
						img.style.display="block";
					}else{
						img.style.display="none";
					}
					leader=scroll().top;
				}
				
				var timer=null;
				var target=0;
				var leader=0;
				img.onclick=function(){
					//window.scrollTo(0,0);
					clearInterval(timer);
					timer=setInterval(function(){
						var step=(target-leader)/10;
						step>0?Math.ceil(step):Math.floor(step);
						leader=leader+step;
						window.scrollTo(0,leader);
						if(leader==0){
							clearInterval(timer);
						}
					},20)
				}
			}
		
			
			function scroll() {  // 开始封装自己的scrollTop
			    if(window.pageYOffset != null) {  // ie9+ 高版本浏览器
			        // 因为 window.pageYOffset 默认的是  0  所以这里需要判断
			        return {
			            left: window.pageXOffset,
			            top: window.pageYOffset
			        }
			    }
			    else if(document.compatMode === "CSS1Compat") {    // 标准浏览器   来判断有没有声明DTD
			        return {
			            left: document.documentElement.scrollLeft,
			            top: document.documentElement.scrollTop
			        }
			    }
			    return {   // 未声明 DTD
			        left: document.body.scrollLeft,
			        top: document.body.scrollTop
			    }
			}
		</script>
	</body>
</html>

三个案例合并

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.main{
				width: 990px;
				margin: 0 auto;
			}
			*{
				padding: 0;
				margin: 0;
			}
			img{
				vertical-align: top;
			}
			.fixed{
				position: fixed;
				left: 0;
				top: 0;
			}
			.img1{
				position: absolute;
				top: 150px;
				left: 10px;
			}
			.img2{
				position: absolute;
				top: 150px;
				right: 10px;
			}
			.header{
				position: fixed;
				bottom: 50px;
				right: 50px;
				cursor: pointer;
				display: none;
			}
		</style>
	</head>
	<body>
		<img class="img1" src="images/aside.jpg" />
		<img class="img2" src="images/aside.jpg" />
		<img src="images/Top.jpg" class="header"/>
		<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>
		
		<script>
			window.onload=function(){
				var top=document.getElementsByClassName("top")[0];
				var height=top.offsetHeight;
				var nav=document.getElementsByClassName("nav")[0];
				var main=document.getElementsByClassName("main")[0];
			
				var imgArr=document.getElementsByTagName("img");
				window.onscroll=function(){
					var val=scroll().top;
					animate(imgArr[0],val+150);
					animate(imgArr[1],val+150);
					if(val>height){
						imgArr[2].style.display="block";
						nav.className="fixed";
						main.style.paddingTop=nav.offsetHeight+"px";
					}else{
						imgArr[2].style.display="none";
						nav.className="";
						main.style.paddingTop=0;
					}
				}
				var timer=null;
				var target=0;
				var leader=scroll().top;
				imgArr[2].onclick=function(){
					clearInterval(timer);
					timer=setInterval(function(){
						var step=(target-leader)/10;
						step>0?Math.ceil(step):Math.floor(step);
						leader=leader+step;
						window.scrollTo(0,leader);
						if(leader==0){
							clearInterval(timer);
						}
					},20)
				}
			}
			
			
			
			//缓动动画封装
			function animate(ele,target){
				clearInterval(ele.timer);
				ele.timer=setInterval(function(){
					var step=(target-ele.offsetTop)/10;
					step=step>0?Math.ceil(step):Math.floor(step);
					ele.style.top=ele.offsetTop+step+"px";
					if(Math.abs(target-ele.offsetTop)<=Math.abs(step)){
						ele.style.top=target+"px";
						clearInterval(ele.timer);
					}
				},30)
			}
			//scroll封装
			function scroll(){
				if(window.pageYOffset!==undefined){
					var json={
						"top":window.pageYOffset,
						"left":window.pageXOffset
					}
					return json;
				}else if(document.compatMode=="CSS1Compat"){
					var json={
						"top":document.documentElement.scrollTop,
						"left":window.documentElement.scrollLeft
					}
					return json;
				}else{
					var json={
						"top":document.body.scrollTop,
						"left":window.body.scrollLeft
					}
					return json;
				}
			}
		</script>
	</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值