标签:parse nload pre 样式 开始 ted lan 等于 onclick
简易的运动框架可以用来控制长宽高、位置、透明度,结合定时器可以实现简单的动画。
其中最主要也是最基础的就是获得元素的属性,我们先来看一下给元素添加样式的三种方法:行内样式、嵌入式样式、外链样式表
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <!-- 外部样式表 --> 7 <link style="stylesheet" href="style.css" type="text/css" /> 8 <!-- 嵌入样式 --> 9 <style> 10 div{ 11 height: 200px; 12 } 13 </style> 14 </head> 15 <body> 16 <!-- 行内样式 --> 17 <div style="width:200px;"></div> 18 </body> 19 </html>
我们要获取元素的样式可以使用 obj.style.xx,但是这个方法只能获取行内样式。
1 <script> 2 var oBox = document.getElementById(‘box‘); 3 console.log(oBox.style.width);//200px 4 5 console.log(oBox.style.height);//‘‘ 6 </script>
所以我们要想获得元素的样式,style是不够的所以引用了currentStyle(IE)方法和getComputedStyle方法
定义一个获取元素样式的通用函数:
1 function getStyle(obj,attr){ 2 return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]; 3 };
开始写doMove函数
首先doMove接受的参数
1 doMove(obj,attr,dir,target,endFn)
obj是要进行操作的对象
attr是要操作的属性
dir是要改变元素属性的速度(在一段时间内改变多少)
target属性改变的目标值
endFn是回调函数
首先,我们先要判断dir的正负,如果元素现在的属性值要是小于目标值则attr为正,否则为负数
注意:用getStyle()函数返回的是字符串,所以要用parseInt转换为数字
1             dir = parseInt(getStyle(obj,attr)) < target ? dir : -dir;
然后定义主要的运动函数
1 obj.timer = setInterval(function (){ 2 //下一个位置的变化 3 var speed = parseInt(getStyle(obj,attr)) + dir; 4 //超过目标值时,speed改为目标值 5 if(speed > target && dir > 0 || speed < target && dir < 0){ 6 speed = target; 7 }; 8 obj.style[attr] = speed + ‘px‘; 9 if(speed == target){ 10 clearInterval(obj.timer); 11 endFn && endFn(); 12 }; 13 },20);
speed = 元素属性当前的值 + 要每段时间的变化,判断改变后的值speed是否大于或者小于目标值target,如果大于或者小于目标值,则speed等于目标值,否则继续执行。
如果speed等于目标值则停止对元素属性的更改,清楚定时器,如果有回调函数则执行。
最后定义对透明度改变的函数:
1 function chOpacity(obj,speed,target,endFn){ 2 //取得最初值,要用parseInt不然得到的opacity属性是字符串 3 var oropacity = parseInt(getStyle(obj,‘opacity‘)); 4 5 //定时器 6 obj.chopacity = null; 7 //判断正负 8 speed = oropacity > target ? -speed : speed; 9 10 clearInterval(obj.chopacity); 11 12 obj.chopacity = setInterval(function(){ 13 14 obj.style.opacity = oropacity += speed; 15 16 if(obj.style.opacity < 0){ 17 obj.style.opacity = 0; 18 clearInterval(obj.chopacity); 19 endFn && endFn(); 20 21 } 22 if(obj.style.opacity > 1){ 23 obj.style.opacity = 1; 24 clearInterval(obj.chopacity); 25 endFn && endFn(); 26 } 27 },40); 28 29 }
基本思想和doMove()函数差不多。这里就不在讲了。
应用:

实现这个动画效果的代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="doMove.js"></script>
    <style>
    #box{
        width:800px;
        height: 60px;
        border: 1px solid black;
        position: absolute;
        top: 300px;
        left: 150px;
        opacity: 1;
        line-height: 60px;
    }
    #box2{
        width: 800px;
        height: 60px;
        position: absolute;
        background: green;
        top: 0px;
        left: 0px;
    }
    span{
        display: inline-block;
        width: 90px;
        position: absolute;
        top:10px;
    }
    </style>
</head>
<body>
    <div id="box">
    </div>
    <script>
    window.onload = function(){
            var timer = null;
            var oSpan = document.getElementsByTagName(‘span‘);
            var oBox = document.getElementById(‘box‘);
            var oBox2 = document.getElementsByTagName(‘div‘);
            var num = 0;
            var len = 8;
            var str = ‘‘;
            for(var i=0;i<len;i++){
                str += ‘<span style="width:90px;position:absolute;top:0px;left:‘+i*110+‘px">+1</span>‘;
            }
            str += ‘<div style="width: 0px;height: 60px;position: absolute;background: rgb(100,100,100);top: 0px;left: 0px; "></div>‘
            oBox.innerHTML = str;
            oBox.onclick = function(){
                clearInterval(timer);
                timer = setInterval(function(){
                    doMove(oSpan[num],‘top‘,2,-150);
                    doMove(oBox2[1],‘width‘,23,800);
                    chOpacity(oSpan[num],0.040,0);
                    num++;
                    if(num == oSpan.length){
                        clearInterval(timer);
                    }
                },40);
            }
    }
    </script>
</body>
</html>
doMove函数
1 function doMove(obj,attr,dir,target,endFn){ 2 //判断数值的正负,如果目标值大于当前值则为正 3 dir = parseInt(getStyle(obj,attr)) < target ? dir : -dir; 4 5 clearInterval(obj.timer); 6 7 obj.timer = setInterval(function (){ 8 //下一个位置的变化 9 var speed = parseInt(getStyle(obj,attr)) + dir; 10 //超过目标值时,speed改为目标值 11 if(speed > target && dir > 0 || speed < target && dir < 0){ 12 speed = target; 13 }; 14 obj.style[attr] = speed + ‘px‘; 15 if(speed == target){ 16 clearInterval(obj.timer); 17 endFn && endFn(); 18 }; 19 },20); 20 }; 21 22 function chOpacity(obj,speed,target,endFn){ 23 //取得最初值,要用parseInt不然得到的opacity属性是字符串 24 var oropacity = parseInt(getStyle(obj,‘opacity‘)); 25 26 //定时器 27 obj.chopacity = null; 28 //判断正负 29 speed = oropacity > target ? -speed : speed; 30 31 clearInterval(obj.chopacity); 32 33 obj.chopacity = setInterval(function(){ 34 35 obj.style.opacity = oropacity += speed; 36 37 if(obj.style.opacity < 0){ 38 obj.style.opacity = 0; 39 clearInterval(obj.chopacity); 40 endFn && endFn(); 41 42 } 43 if(obj.style.opacity > 1){ 44 obj.style.opacity = 1; 45 clearInterval(obj.chopacity); 46 endFn && endFn(); 47 } 48 },40); 49 50 } 51 52 function getStyle(obj,attr){ 53 return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]; 54 };
标签:parse nload pre 样式 开始 ted lan 等于 onclick
原文地址:http://www.cnblogs.com/qqandfqr/p/6075949.html