javascript网页特效(二)

1 scroll家族——scrollTop、scrollLeft 




1.1 scrollTop 和 scrollLeft 


  scrollTop本身含义:被卷去的头部,它就是当你滑动滚轮浏览网页的时候网页隐藏在屏幕上方的距离。scrollLeft:同理scrollTop。


1.2 怎么得到scollTop 

  我们学习一个事件 :  页面滚动事件  
  window.onscroll = function() { 页面滚动语句  }  

  各种浏览器下获得scollTop  
  1. 谷歌浏览器和没有声明 DTD  <DOCTYPE    > :  
  document.body.scrollTop;  
  2. 火狐和其他浏览器   
  document.documentElement.scrollTop;  
  3. ie9+和 最新浏览器都认识  
  window.pageXOffset(scrollLeft); pageYOffset(scrollTop)  

  兼容性写法:  
    
var scrollTop = window.pageYOffset || document.documentElement.scrollTop
        || document.body.scrollTop || 0;


 1.3 代码示例 


    CSS代码:
body {
            height: 3000px;
        }
   javascript代码:   
<script>
            window.onscroll = function() {
            console.log(11);
            var scrollTop = window.pageYOffset || document.documentElement.scrollTop
                || document.body.scrollTop || 0;
            document.title = scrollTop;
            console.log(scrollTop);
            }
        </script>

2 封装自己的scollTop函数 


2.1 简单介绍javascript对象字面量 

  javascript有基本的数据类型,同样也可以表示对象。 `var obj = {属性名:值,属性名:值}`  
  访问对象中的属性   `obj.属性名`

代码示例

   CSS代码:
  body {
            height: 3000px;
        }


   javascript代码:  

    
<script>
        function scroll() {
            if(window.pageYOffset != null)  //  ie9+ 和其他浏览器
            {
                return {
                    left: window.pageXOffset,
                    top: window.pageYOffset
                }
            }
            else if(document.compatMode == "CSS1Compat")  //判断页面中是否声明的了DTD<!DOCTYPE html>,没有声明为BackCompat
            {
                return {
                    left: document.documentElement.scrollLeft,
                    top: document.documentElement.scrollTop
                }
            }
            return { //  剩下的肯定是怪异模式的
                left: document.body.scrollLeft,
                top: document.body.scrollTop
            }
        }
        window.onscroll = function() {
            console.log(scroll().top);
        }
    </script>


看看结果是什么?

   接下来我们再完成一个示例——固定导航栏  
   CSS代码:

        
*{margin:0;padding:0}
        img{
            vertical-align: top;
        }
        .main{
            margin:0 auto;
            width:1000px;
            margin-top:10px;

        }
        .fixed {
            position: fixed;
            top: 0;
            left: 0;
        }




   html代码:  

      
  <div class="top" id="top">
            <img src="images/top.png" alt=""/>
        </div>
        <div class="nav" id="Q-nav">
            <img src="images/nav.png" alt=""/>
        </div>
        <div class="main">
            <img src="images/main.png" alt=""/>
        </div>


   javascript代码:   
 
    
my.js代码
        function $(id) {return document.getElementById(id);}
        function scroll() {
            if(window.pageYOffset != null)  //  ie9+ 和其他浏览器
            {
                return {
                    left: window.pageXOffset,
                    top: window.pageYOffset
                }
            }
            else if(document.compatMode == "CSS1Compat") 
            {
                return {
                    left: document.documentElement.scrollLeft,
                    top: document.documentElement.scrollTop
                }
            }
            return { //  剩下的肯定是怪异模式的
                left: document.body.scrollLeft,
                top: document.body.scrollTop
            }
    }
    <script src="my.js" type="text/javascript"></script>
    <script>
       var nav = $("Q-nav");
       var navTop = nav.offsetTop;  // 得到导航栏距离顶部的距离
       console.log(navTop);
        window.onscroll = function() {
           // console.log(nav.offsetTop);
            if(scroll().top >= navTop)
            {
                //alert("到位置了");
                nav.className = "nav fixed";
            }
            else
            {
                nav.className = "nav";
            }
        }
    </script>



2.3 案例 



<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        img{
            position: absolute;
            left:0;
            top:50px;
        }
        #demo{
            width:1000px;
            margin:0 auto;
        }
    </style>
    <script src="my.js" type="text/javascript"></script>
    <script type="text/javascript">
      window.onload = function(){
        var img = document.getElementById("pic");
        var offsetTop = img.offsetTop;
        var target=offsetTop;
        window.onscroll = function(){
          var t = scroll().top;
          target  = offsetTop+t;
          //img.style.top = offsetTop + t +"px";
        }
        var begin = offsetTop;
        setInterval(function(){
          begin = begin + (target - begin)/10;
          img.style.top = begin+"px";
        },10);
      }
    </script>
</head>
<body>
<img src="images/aside.jpg" alt="" id="pic"/>
<div id="demo">
   <p>天王盖地虎,小鸡炖蘑菇</p>
   <p>天王盖地虎,小鸡炖蘑菇</p>
   <p>天王盖地虎,小鸡炖蘑菇</p>
   <p>天王盖地虎,小鸡炖蘑菇</p>
   <p>天王盖地虎,小鸡炖蘑菇</p>
   
</div>
</body>
</html>


3 scroll家族——scollTo方法 


3.1 scollTo(x,y)方法 

   scrollTo(xpos,ypos) 方法可把内容滚动到指定的坐标。  
   xpos    必需。要在窗口文档显示区左上角显示的文档的 x 坐标。  
   ypos必需。要在窗口文档显示区左上角显示的文档的 y 坐标。  
   因为我们的网页大部分都没有水平滚动条,所以,这个x 不太常用。

3.2 案例

  
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		*{
			margin: 0;
			padding: 0;
		}
		html,body{

			width: 100%;
			height: 100%;
		}
		#ul{
			width: 100%;
			height: 100%;
			list-style: none;
		}
		#ul li{
			width: 100%;
			height: 100%;
		}
		#ol{
			position: fixed;
			top: 0px;
			left: 50px;
			list-style: none;
		}
		#ol li{
			width: 50px;
			height: 50px;
			border: 1px solid black;
		}
	</style>

</head>
<body>
<ul id="ul">
    <li>首页</li>
    <li>关注</li>
    <li>动态</li>
    <li>风格</li>
    <li>作品</li>
</ul>
<ol id="ol">
    <li>首页</li>
    <li>关注</li>
    <li>动态</li>
    <li>风格</li>
    <li>作品</li>
</ol>

</body>
</html>
	<script type="text/javascript">
		var colors = ["red","green","blue","pink","purple"];
		var ulbox = document.getElementById("ul");
		var olbox = document.getElementById("ol");
		var time=null,target,begin=0;
		for (var i = 0; i < colors.length; i++) {
			ulbox.children[i].style.backgroundColor = colors[i];
			olbox.children[i].style.backgroundColor = colors[i];
			olbox.children[i].index = i;
			olbox.children[i].οnclick=function(){
				var li = ulbox.children[this.index];
				target = li.offsetTop;
				clearInterval(time);
				time = setInterval(function(){
					
					begin = begin + (target-begin)/10;
					window.scrollTo(0,begin);
					if(begin == target){
						clearInterval(time);
					}
				},10);
			}
		}
	</script>

# 3.4 放大镜效果实现 #  

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>

	<style type="text/css">
		*{
			margin: 0;
			padding: 0;
		}
		 .box {
            width: 350px;
            height: 350px;
            margin: 100px;
            border: 1px solid #ccc;
            position: relative;
        }
        .small{
        	position: relative;
        }
        .big{
        	position: absolute;
        	left: 360px;
        	top: 0;
        	width: 400px;
        	height: 400px;
        	border: 1px solid #ccc;
        	overflow: hidden;
        	display: none;
        }
		 .mask {
            width: 175px;
            height: 175px;
            background: rgba(255, 255, 0, 0.4);
            position: absolute;
            top: 0;
            left: 0;
            cursor: move;
            display: none;
            
        }
        #bigImg{
        	position: absolute;
        	left:0;
        	top: 0;

        }

	</style>
</head>
<body>
	<div class="box" id="box">
	    <div class="small">
	        <img src="images/001.jpg" width="350" alt=""/>
	        <div class="mask"></div>
	    </div>
	    <div class="big">
	        <img id="bigImg" src="images/0001.jpg" width="800" alt=""/>
	    </div>
	</div>
</body>
</html>
<script type="text/javascript" scr="my.js"></script>
<script type="text/javascript">
	var small  = document.getElementById("box").children[0];
	var mask = small.children[1];
	var big = document.getElementById("box").children[1];
	var box = document.getElementById("box");
	var bigImg = document.getElementById("bigImg");

	
	var masktop ,maskleft;

	


	small.onmousemove = function(event){
		var event  = event || window.event;
		//获得鼠标在small盒子中的位置
		var pageY = event.pageY || event.clientY + scroll().top;
		var pageX = event.pageX || event.clientX + scroll().left;
		
		masktop = pageY - box.offsetTop- mask.offsetWidth/2;
		maskleft =pageX  - box.offsetLeft  - mask.offsetWidth/2;

		//防止遮罩层超过小盒子
		if(masktop<0){
			masktop=0;
		}
		else if(masktop>this.offsetHeight - mask.offsetHeight)
		{
			masktop=this.offsetHeight - mask.offsetHeight;
		}
		if(maskleft<0){
			maskleft=0;
		}
		else if(maskleft> this.offsetWidth - mask.offsetWidth){
			maskleft=this.offsetWidth - mask.offsetWidth;
		}
		
		mask.style.top = masktop  +"px";
		mask.style.left = maskleft+ "px";

		//移动距离的倍数
		var maskToMove =  small.offsetHeight - mask.offsetHeight;
		var bigImgToMove = 800 - big.offsetHeight;
		var moveB = bigImgToMove / maskToMove;
	

		//移动大图片
		bigImg.style.left = -maskleft * moveB + "px";
		bigImg.style.top = -masktop * moveB + "px";
	}

	small.οnmοuseοver= function(){
		mask.style.display = "block";
		big.style.display="block";

	}
	small.οnmοuseοut= function(){
		mask.style.display = "none";
		big.style.display="none";

	}
</script>



  


# 总结 #

  学习了scollTo家族的属性,综合上述知识及上节课的内容完成放大镜和固定导航栏等案例。



# 预习 #
  学习了scollTo家族的属性和事件的冒泡机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值