• 9种原生js动画效果(转)


    1,匀速动画效果
    window.onload = function(){
     var odiv = document.getElementById('odiv');
     odiv.onmouseover = function(){
      startMover(0);
     }
     odiv.onmouseout = function(){
      startMover(-200);
     }
    }
    var timer = null;
    function startMover(itarget){//目标值
     clearInterval(timer);//执行当前动画同时清除之前的动画
     var odiv = document.getElementById('odiv');
     timer = setInterval(function(){
     var speed = 0;
     if(odiv.offsetLeft > itarget){
      speed = -1;
     }
     else{
      speed = 1;
     }
     if(odiv.offsetLeft == itarget){
      clearInterval(timer);
     }
     else{
      odiv.style.left = odiv.offsetLeft+speed+'px';
      }
     },30);
    }
    2,缓冲动画效果
    window.onload = function(){
     var odiv = document.getElementById('odiv');
     odiv.onmouseover = function(){
      startMover(0);
     }
     odiv.onmouseout = function(){
      startMover(-200);
     }
    }
    var timer = null;
    function startMover(itarget){//速度和目标值
     clearInterval(timer);//执行当前动画同时清除之前的动画
     var odiv = document.getElementById('odiv');
     timer = setInterval(function(){
     var speed = (itarget-odiv.offsetLeft)/10;//缓冲动画的速度参数变化值
     //如果速度是大于0,说明是向右走,那么就向上取整
     speed = speed>0?Math.ceil(speed):Math.floor(speed);
     //Math.floor();向下取整
     if(odiv.offsetLeft == itarget){
      clearInterval(timer);
     }
     else{
      //clientLeft 返回对象的offsetLeft属性值和到当前窗口左边的真实值之间的距离 
      odiv.style.left = odiv.offsetLeft+speed+'px';
      }
     },30);
    }
    3,透明度动画
    window.onload = function(){
     var odiv = document.getElementsByTagName('div');
     for(var i=0;i<odiv.length;i++)
     {
       odiv[i].onmouseover = function(){
       startOP(this,100);
      }
      odiv[i].onmouseout = function(){
       startOP(this,30);
      }
      odiv[i].timer = null;//事先定义
      odiv[i].alpha = null;//事先定义
      //这里发现一个问题,对象的动画属性可以不定义,但是透明度属性必须定义,否则报错
     }
    }
    function startOP(obj,utarget){
      clearInterval(obj.timer);//先关闭定时器
      obj.timer = setInterval(function(){
      var speed = 0;
      if(obj.alpha>utarget){
      speed = -10;
      }
      else{
      speed = 10;
      }
      obj.alpha = obj.alpha+speed;
      if(obj.alpha == utarget){
      clearInterval(obj.timer);
      }
      obj.style.filter = 'alpha(opacity:'+obj.alpha+')';//基于IE的
      obj.style.opacity = parseInt(obj.alpha)/100;
      },30); 
    }
    4,多物体动画
    window.onload = function(){
     var olist = document.getElementsByTagName('li');
     for(var i=0; i<olist.length;i++)
     {
      olist[i].onmouseover = function(){
      startmov(this,400);
      };
      olist[i].onmouseleave = function(){
      startmov(this,200);
      };
      olist[i].timer = null;
     }
     function startmov(obj,itarget){
      clearInterval(obj.timer);//执行动画之前清除动画
      obj.timer = setInterval(function(){
       var speed =0;
       speed = (itarget - obj.offsetWidth)/8;
       speed = speed>0?Math.ceil(speed):Math.floor(speed);
       if(obj.offsetWidth == itarget){
       clearInterval(obj.timer);
       }
       else{
       obj.style.width = obj.offsetWidth+speed+'px';
       }
      },30);
     }
    }
    5,获取样式动画
    window.onload = function(){
            var odiv = document.getElementById('odiv');
            odiv.onmouseover = function(){
                startMov(this);
            };
            function startMov(obj){
                setInterval(function(){
                    obj.style.width = parseInt(getStyle(obj,'width'))+1+'px';
                    obj.style.fontSize = parseInt(getStyle(obj,'fontSize'))+1+'px';
                },30);
            }
            function getStyle(obj,attr)
            {
                if(obj.currentStyle){
                    return obj.currentStyle[attr];
                }
                else{
                    return getComputedStyle(obj,false)[attr];
                }
            }
        }
    6,多物体复杂动画
    window.onload = function(){
     var li1 = document.getElementById('li1');
     var li2 = document.getElementById('li2');
     li1.onmouseover = function(){
      startMov(this,400,'width');
     };
     li1.onmouseout = function(){
      startMov(this,200,'width');
     };
     li2.onmouseover = function(){
      startMov(this,200,'height');
     };
     li2.onmouseout = function(){
      startMov(this,100,'height');
     };
     function startMov(obj,itarget,attr){
      clearInterval(obj.timer);//执行动画之前清除动画
      obj.timer = setInterval(function(){
       var icur = parseInt(getStyle(obj,attr));
       var speed =0;
       speed = (itarget - icur)/8;
       speed = speed>0?Math.ceil(speed):Math.floor(speed);
       if(icur == itarget){
       clearInterval(obj.timer);
       }
       else{
       obj.style[attr] = icur+speed+'px';
       }
      },30);
     }
     function getStyle(obj,attr)
     {
      if(obj.currentStyle){
      return obj.currentStyle[attr];
      }
      else{
      return getComputedStyle(obj,false)[attr];
      }
     }
    }
    7,多物体复杂动画(带透明度的)
    window.onload = function(){
     var li1 = document.getElementById('li1');
     var li2 = document.getElementById('li2');
     li1.onmouseover = function(){
      startMov(this,100,'opacity');
     };
     li1.onmouseout = function(){
      startMov(this,30,'opacity');
     };
     li2.onmouseover = function(){
      startMov(this,200,'height');
     };
     li2.onmouseout = function(){
      startMov(this,100,'height');
     }
     li1.timer = null;
     li2.timer = null;
     function startMov(obj,itarget,attr){
      clearInterval(obj.timer);//执行动画之前清除动画
      obj.timer = setInterval(function(){
       var icur = 0;
       if(attr == 'opacity'){
       icur = Math.round(parseFloat(getStyle(obj,attr))*100);//转换成整数,并且四舍五入下
       //计算机在计算小数的时候往往是不准确的!
       }
       else{
       icur = parseInt(getStyle(obj,attr));
       }
       var speed =0;
       speed = (itarget - icur)/8;
       speed = speed>0?Math.ceil(speed):Math.floor(speed);
       if(icur == itarget){
       clearInterval(obj.timer);
       }
       else{
        if(attr == 'opacity'){
        obj.style.filter = 'alpha(opacity:'+(icur+speed)+')';
        obj.style.opacity = (icur+speed)/100;
        }
        else{
        obj.style[attr] = icur+speed+'px';
        } 
       }
      },30);
     }
     function getStyle(obj,attr)
     {
      if(obj.currentStyle){
      return obj.currentStyle[attr];
      }
      else{
      return getComputedStyle(obj,false)[attr];
      }
     }
    }
    8,链式动画
    window.onload = function(){
     var li1 = document.getElementById('li1');
     li1.onmouseover = function(){
      startMov(li1,400,'width',function(){
       startMov(li1,200,'height',function(){
       startMov(li1,100,'opacity');
       });
      });
     };
     li1.onmouseout = function(){
      startMov(li1,30,'opacity',function(){
       startMov(li1,100,'height',function(){
       startMov(li1,100,'width');
       });
      });
     };
     li1.timer = null;
     function startMov(obj,itarget,attr,fn){//fn回调函数
      clearInterval(obj.timer);//执行动画之前清除动画
      obj.timer = setInterval(function(){
       var icur = 0;
       if(attr == 'opacity'){
       icur = Math.round(parseFloat(getStyle(obj,attr))*100);//转换成整数,并且四舍五入下
       //计算机在计算小数的时候往往是不准确的!
       }
       else{
       icur = parseInt(getStyle(obj,attr));
       }
       var speed =0;
       speed = (itarget - icur)/8;
       speed = speed>0?Math.ceil(speed):Math.floor(speed);
       if(icur == itarget){
       clearInterval(obj.timer);
       if(fn){
        fn();
       }
       }
       else{
        if(attr == 'opacity'){
        obj.style.filter = 'alpha(opacity:'+(icur+speed)+')';
        obj.style.opacity = (icur+speed)/100;
        }
        else{
        obj.style[attr] = icur+speed+'px';
        } 
       }
      },30);
     }
     function getStyle(obj,attr)
     {
      if(obj.currentStyle){
      return obj.currentStyle[attr];
      }
      else{
      return getComputedStyle(obj,false)[attr];
      }
     }
    }
    9,多物体同时运动动画
    window.onload = function(){
     var li1 = document.getElementById('li1');
     li1.onmouseover = function(){
      startMov(li1,{201,height:200,opacity:100});
     };
     li1.onmouseout = function(){
      startMov(li1,{200,height:100,opacity:30});
     };
     li1.timer = null;
     function startMov(obj,json,fn){//fn回调函数
      clearInterval(obj.timer);//执行动画之前清除动画
      var flag = true;//是否动画都完成了
      obj.timer = setInterval(function(){
       for(var attr in json){
       var icur = 0;
       if(attr == 'opacity'){
       icur = Math.round(parseFloat(getStyle(obj,attr))*100);//转换成整数,并且四舍五入下
       //计算机在计算小数的时候往往是不准确的!
       }
       else{
       icur = parseInt(getStyle(obj,attr));
       }
       var speed =0;
       speed = (json[attr] - icur)/8;
       speed = speed>0?Math.ceil(speed):Math.floor(speed);
       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);
     }
     function getStyle(obj,attr)
     {
      if(obj.currentStyle){
      return obj.currentStyle[attr];
      }
      else{
      return getComputedStyle(obj,false)[attr];
      }
     }
    }
  • 相关阅读:
    安装IIS的郁闷之旅
    设置WPF窗口相对于非WPF窗口的位置
    钓鱼记
    java拾遗
    人间四月芳菲尽
    [linux] x server can not start under VMWare
    如果没有开源软件没有免费软件,这个世界会怎么样?评[盖茨北大演讲遭遇开源人士抗议]
    程序员的面包
    2007中国软件英雄会-七年的等待
    sysbench安装
  • 原文地址:https://www.cnblogs.com/xiewangfei123/p/12723869.html
Copyright © 2020-2023  润新知