js动画

js 动画
 1、鼠标移入移出 、单物体运动动画

<div  id='mydiv' style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
     <span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
    </div>

    <div id='mydiv2' style="width: 100px;height: 100px;background-color: green;opacity:0.1;filter:alpha(opacity=10);">
    </div>
    <script type="text/javascript">
        //匀速显示、隐藏 
        var mydiv = document.getElementById('mydiv'),
            timer = null;
        mydiv.onmouseover = function(){
           moveDiv(10,0);
        }
        mydiv.onmouseout = function(){
           moveDiv(-10,-100);
        }
        function moveDiv(speed,iTarget){
            var mydiv = document.getElementById('mydiv');
            clearInterval(timer);
            timer = setInterval(function(){
                if(mydiv.offsetLeft == iTarget){
                     clearInterval(timer);
                }else{
                      mydiv.style.left = mydiv.offsetLeft + speed + 'px';
                }

            },30)
        }


    //开始快、后来慢非匀速移动显示隐藏
       var mydiv = document.getElementById('mydiv'),
        timer = null;

        mydiv.onmouseover = function(){
            moveDiv(0,10);
        }
        mydiv,onmouseout = function(){
            moveDiv(-100,-10);
        }

        function moveDiv(iTarget,speed){
            var mydiv = document.getElementById('mydiv');
            clearInterval(timer);
            timer = setInterval(function(){
                speed = (iTarget - mydiv.offsetLeft) /20;
                speed = speed > 0 ? Math.ceil(speed): Math.floor(speed); //>0右移否则左移,所有这种判断都要取整
                if(iTarget == mydiv.offsetLeft){
                    clearInterval(timer);
                }else{
                    mydiv.style.left = mydiv.offsetLeft + speed + 'px';
                }
            },30)
        }


    //修改透明度
        var mydiv2 = document.getElementById('mydiv2'),
            timer2 = null,
            alpha = 10;
        mydiv2.onmouseover = function(){
           moveDiv2(3,90);
        }
        mydiv2.onmouseout = function(){
            alert(22);
           moveDiv2(-3,10);
        }
        function moveDiv2(speed,iTarget){
            clearInterval(timer2);
            var mydiv2 = document.getElementById('mydiv2');
            timer2 = setInterval(function(){
                if(alpha == iTarget){
                     clearInterval(timer2);
                }else{
                    alpha += speed
                    mydiv2.style.filter ='alpha(opactiy:'+alpha+')' ;
                    mydiv2.style.opacity = alpha/100;
                }
            },30)
        }

    </script>




2、多物体运动动画

<div   style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
     <span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
    </div>

    <div  style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
     <span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
    </div>

    <div  style="border: 1px solid red; width: 100px;height: 100px;position: relative;left: -100px;">
     <span style="position: absolute;left: 100px;border: 1px solid green;">分享</span>
    </div>
    <script type="text/javascript">
    var mydivs = document.getElementsByTagName('div');
    for (var i = 0; i < mydivs.length; i++) {
        mydivs[i].timer = null;
        mydivs[i].onmouseover = function(){
                moveDiv(this,0,10);
        }
        mydivs[i].onmouseout = function(){
                moveDiv(this,-100,-10);
        }
    }

    function moveDiv(obj,iTarget,speed){
        clearInterval(obj.timer);
        obj.timer = setInterval(function(){
            speed = (iTarget - obj.offsetLeft) /20;
            speed = speed > 0 ? Math.ceil(speed): Math.floor(speed); //>0右移否则左移
            if(iTarget == obj.offsetLeft){
                clearInterval(obj.timer);
            }else{
                obj.style.left = obj.offsetLeft + speed + 'px';
            }
        },30)
    } 






3、公用方法、变换任意属性、透明度、宽度、高度

 <!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
<style type="text/css">
    *{margin: 0;padding: 0}
    div{width: 100px;}
</style>
</head>
<body>
   <div style="background-color:red;height: 100px;position: relative;left: 0px"></div>
    <div style="background-color:red;height: 100px;position: relative;left: 0px;margin-top: 10px;"></div>
    <div style="background-color:red;height: 100px;position: relative;left: 0px;margin-top: 10px;filter:alpha(opacity:30);opacity:0.3;"></div>

    <script type="text/javascript">
        var mydiv1 = document.getElementsByTagName('div')[0];
        var mydiv2 = document.getElementsByTagName('div')[1];
        var mydiv3 = document.getElementsByTagName('div')[2];

        mydiv1.onmouseover = function(){
            moveDiv(this,200,'width');
        }
        mydiv1.onmouseout = function(){
            moveDiv(this,100,'width');
        }
        mydiv2.onmouseover = function(){
            moveDiv(this,200,'height');
        }
        mydiv2.onmouseout = function(){
            moveDiv(this,100,'height');
        }
        mydiv3.onmouseover = function(){
            moveDiv(this,100,'opacity');
        }
        mydiv3.onmouseout = function(){
            moveDiv(this,30,'opacity');
        }

        function moveDiv(obj,iTarget,attr){

            clearInterval(obj.timer);
            obj.timer = setInterval(function(){
                var icur = 0;
                if(attr =='opacity' || attr == 'filter'){
                    attr = 'opacity';
                    icur= Math.round(parseFloat(getStyle(obj,attr)) * 100);

                }else{
                    icur= parseInt(getStyle(obj,attr));
                }

                var speed = ( iTarget - icur ) /8;
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                var num = icur + speed;
                if(iTarget ==icur){
                    clearInterval(obj.timer);
                }else{
                    if(attr =='opacity'){
                        console.log(icur + speed);
                        //透明度
                        obj.style.filter ='alpha(opacity:'+num+')' ;
                        obj.style.opacity = num/100;
                    }else{
                        //其他属性
                        obj.style[attr] = num + 'px';
                    }
                }
            },30)
        }

        function getStyle(obj,attr){
            if(obj.currentStyle){
                return obj.currentStyle[attr];
            }else{
                return getComputedStyle(obj,false)[attr];
            }
        }
    </script>
</body>
</html>


4、先变宽、在变高

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
<style type="text/css">
    *{margin: 0;padding: 0}
</style>
</head>
<body>
    <div style="background-color:red;height: 100px;width: 100px;position: relative;left: 0px"></div>
    <script type="text/javascript">
        var mydiv1 = document.getElementsByTagName('div')[0];
        mydiv1.onmouseover = function(){
            moveDiv(mydiv1,200,'width',function(){
                moveDiv(mydiv1,200,'height')
            });
        }
        mydiv1.onmouseout = function(){
            moveDiv(mydiv1,100,'width',function(){
                  moveDiv(mydiv1,100,'height')
            });
        }

        function moveDiv(obj,iTarget,attr,fn){

            clearInterval(obj.timer);
            obj.timer = setInterval(function(){
                var icur = 0;
                if(attr =='opacity' || attr == 'filter'){
                    attr = 'opacity';
                    icur= Math.round(parseFloat(getStyle(obj,attr)) * 100);

                }else{
                    icur= parseInt(getStyle(obj,attr));
                }

                var speed = ( iTarget - icur ) /8;
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                var num = icur + speed;
                if(iTarget ==icur){
                    clearInterval(obj.timer);
                    if(fn){
                        fn();
                    }
                }else{
                    if(attr =='opacity'){
                        console.log(icur + speed);
                        //透明度
                        obj.style.filter ='alpha(opacity:'+num+')' ;
                        obj.style.opacity = num/100;
                    }else{
                        //其他属性
                        obj.style[attr] = num + 'px';
                    }
                }

            },30)
        }

        function getStyle(obj,attr){
            if(obj.currentStyle){
                return obj.currentStyle[attr];
            }else{
                return getComputedStyle(obj,false)[attr];
            }
        }
    </script>
</body>
</html>


5、鼠标移入 多个动画同时改变

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv=Content-Type content="text/html;charset=utf-8">
<style type="text/css">
    *{margin: 0;padding: 0}
</style>
</head>
<body>
    <div style="background-color:red;height: 100px;width: 100px;position: relative;left: 0px;opacity:0.3;filter:alpha(opacity:30);"></div>
    <script type="text/javascript">
        var mydiv1 = document.getElementsByTagName('div')[0];
        mydiv1.onmouseover = function(){
            moveDiv(mydiv1,{width:101,height:200,opacity:100});
        }
        mydiv1.onmouseout = function(){
          moveDiv(mydiv1,{width:100,height:100,opacity:30});
        }

        function moveDiv(obj,json,fn){ //json={width:200,height:200}
            var flag = true; //判断是否所有属性都到达目标值,用来关闭定时器
            clearInterval(obj.timer);
            obj.timer = setInterval(function(){
                for(var attr in json){
                    var icur = 0;
                    if(attr =='opacity' || attr == 'filter'){
                        attr = 'opacity';
                        icur= Math.round(parseFloat(getStyle(obj,attr)) * 100);

                    }else{
                        icur= parseInt(getStyle(obj,attr));
                    }

                    var speed = ( json[attr] - icur ) /8;
                    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                    var num = icur + speed;
                    if(json[attr] !=icur){ //不是所有属性都到达目标值
                        flag = false;
                    }

                    if(attr =='opacity'){
                        //透明度
                        obj.style.filter ='alpha(opacity:'+num+')' ;
                        obj.style.opacity = num/100;
                    }else{
                        //其他属性
                        obj.style[attr] = num + 'px';
                    }

                    if(flag === true){ //所有属性都到达目标值关闭
                        clearInterval(obj.timer);
                        if(fn){
                            fn();
                        }
                    }
                }
            },30)
        }

        function getStyle(obj,attr){
            if(obj.currentStyle){
                return obj.currentStyle[attr];
            }else{
                return getComputedStyle(obj,false)[attr];
            }
        }
    </script>
</body>
</html> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值