JS簡易運動框架

Ps:此代碼在慕課網上有詳解(http://www.imooc.com/video/3181)

     先放代碼

 


 
function getStyle(obj,attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; } else{ return getComputedStyle(obj,false)[attr]; } } /*window.onload=function(){ var ali=document.getElementsByTagName('li'); for(var i=0;i<ali.length;i++){ ali[i].timer=null; ali[i].onmouseover=function(){ stratMove(this,'opacity',100); } ali[i].onmouseout=function(){ stratMove(this,'opacity',20); } } }*/ function stratMove(obj,json,fn){ var flag=true; clearInterval(obj.timer); obj.timer=setInterval(function(){ for( var attr in json){ //1.取數值 var icur=0; if(attr=='opacity'){ icur=Math.round(parseFloat(getStyle(obj,attr))*100); } else { icur=parseInt(getStyle(obj,attr)); } //2.算速度 var speed=(json[attr]-icur)/8;//8爲比例係數 speed=speed>0?Math.ceil(speed):Math.floor(speed); //3.檢測停止 if(icur!=json[attr]) { flag=false; } /* clearInterval(obj.timer); if (fn){ fn(); } }*/ if(attr=='opacity'){ obj.style.filter='alpha(opacity:'+(icur+speed)+')'; obj.style.opacity=(icur+speed)/100; } else { obj.style[attr]=icur+speed+'px'; } if(flag){ clearInterval(obj.timer); if (fn){ fn(); } } }},30) }

測試代碼:

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script type="text/javascript" src="move.js"></script>
    <script language="JavaScript">
        window.onload=function() {
            var li = document.getElementById('li1');
            li.onmouseover = function () {
                stratMove(li, {'width':400,'height':200})
            }
            li.onmouseout = function () {
                stratMove(li, {'width':200,'height':100})
            }
        }
    </script>
    <title>Title</title>
    <style type="text/css">
        li{
            width: 200px;
            height: 100px;
            background-color: yellow;
            border: 2px solid;
        }
    </style>
</head>
<body>
<ul>
    <li id="li1">
    </li>
</ul>
</body>
</html>

 

 

    略解:

 

 

                 1.

function getStyle(obj,attr){
    if(obj.currentStyle){
        return obj.currentStyle[attr];
    }
    else{
        return getComputedStyle(obj,false)[attr];
    }
}


               這個是判斷瀏覽器返回樣式的函數,IE瀏覽器不支持getComputedStyle的返回,這個函數使move.js兼容IE。

 

            2.

 

function stratMove(obj,json,fn){
    var flag=true;
    clearInterval(obj.timer); //防止鼠標重新激活此函數後造成的速度疊加
    obj.timer=setInterval(function(){

        for( var  attr in json){
        //1.取數值
        var icur=0;
        if(attr=='opacity'){
            icur=Math.round(parseFloat(getStyle(obj,attr))*100);
        }
        else {
            icur=parseInt(getStyle(obj,attr));
        }//透明度參數和長短參數類型不同
        //2.算速度
        var speed=(json[attr]-icur)/8;//8爲比例係數,正數爲向右移動,負數爲向左移動
        speed=speed>0?Math.ceil(speed):Math.floor(speed);//速度除不盡,會造成到不了target的情況。
        //3.檢測停止,這有防止json中完成了一個值的變動後便停止了運動
        if(icur!=json[attr]) {
            flag=false;
        }

            if(attr=='opacity'){//透明度與長短參數值不同
                obj.style.filter='alpha(opacity:'+(icur+speed)+')';
                obj.style.opacity=(icur+speed)/100;
            }
            else {
            obj.style[attr]=icur+speed+'px';
            }

            if(flag){
                clearInterval(obj.timer);
                if (fn){
                    fn();
                }
            }
    }},30)

}

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章