1. 程式人生 > >運動框架和隱藏邊框

運動框架和隱藏邊框

一個完美的運動框架是經過不斷地改善調整過來的,可以適合各種樣式的運動。在JS運動中一下幾點是至關重要的:
1.不加絕對定位的話是肯定不會動的!
2.運動框架中:在開始運動時,關閉已有定時器。把運動和停止隔開。(if、else)
3.透明度在IE中支援:filter:alpha(opacity:30),在FF和Chrome中opacity:0.3。
4.緩衝運動中,距離越遠,速度越大,速度由距離決定。速度要取整,不然會出現抖動。取整的方法有:Math.ceil 向上取整;Math.floor向下取整;Math.abs取絕對值;Math.round四捨五入;
而框架的演變也是慢慢一步步優化過來的:
startMove(iTarget)
startMove(obj,iTarget)
startMove(obj,attr,iTarget)
startMove(obj,attr,iTarget,fn)
startMove(obj,json)
startMove(obj,json,fn)
運動框架如下:

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


//startMove(oDiv, {width: 400, height: 400})


function startMove(obj, json, fnEnd)
{
    clearInterval(obj.timer);
    obj.timer=setInterval(function
(){
var bStop=true; //假設:所有值都已經到了 for(var attr in json) { var cur=0; if(attr=='opacity') { cur=Math.round(parseFloat(getStyle(obj, attr))*100); } else { cur=parseInt(getStyle(obj, attr)); } var
speed=(json[attr]-cur)/6; speed=speed>0?Math.ceil(speed):Math.floor(speed); if(cur!=json[attr]) bStop=false; if(attr=='opacity') { obj.style.filter='alpha(opacity:'+(cur+speed)+')'; obj.style.opacity=(cur+speed)/100; } else { obj.style[attr]=cur+speed+'px'; } } if(bStop) { clearInterval(obj.timer); if(fnEnd)fnEnd(); } }, 30); }

下面看一個例項:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>隱藏邊框</title>
    <style type="text/css">
    #div1 {width: 100px;height: 100px;position:absolute;background-color:red;left:-100px;}
    #div1 span {width: 30px;height:50px;background-color:yellow;line-height: 25px;position: absolute;right:-30px;top: 25px;}
    </style>
    <script type="text/javascript" src='move2.js'></script>
    <script type="text/javascript">
    window.onload=function()
    {
        var oDiv = document.getElementById('div1');
        var img = oDiv.getElementsByTagName('img');

        oDiv.onmouseover=function()
        {
            startMove(oDiv,{left:0})
        };
        oDiv.onmouseout=function()
        {
            startMove(oDiv,{left:-100})
        };
    };
    </script>
</head>
<body>
    <div id="div1">
        <img src="images/114.gif" width="100px" height="100px" alt="">
        <span>分享</span>
    </div>
</body>
</html>

這是一個藏在邊上的隱藏邊框,可以結合右側懸浮框將其進行優化。