javascript动画效果类封装代码

BAT 批处理程序 2017-05-16

<input id=output3 style="position:absolute;top:300;left:300;"/>

<input id=output1 />

<input id=output2 />

<br/>

<input id=output4 />

<script>

function Animation(target,targetProperty,closure,precision)

{

  closure=closure||function(x){return x;};

  precision=precision||10;

  this.handle;

  var beginTime=new Date();

  var stopTime=new Date();

  this.Begin=function(){

    beginTime=new Date();

    this.handle=setInterval(

      function(){

        var now=new Date();

        target[targetProperty]=closure(now.getTime()-beginTime.getTime());

      },

      precision

    );

       }

  this.Continue=function(){

    var now=new Date();

    beginTime.setTime(now.getTime()-stopTime.getTime()+beginTime.getTime());

    this.handle=setInterval(

      function(){

        var now=new Date();

        target[targetProperty]=closure(now.getTime()-beginTime.getTime());

      },

      precision

    );

  }

  this.Stop=function(duration){

    clearInterval(this.handle);

    if(duration===undefined)

    {

      stopTime=new Date();

      duration=stopTime.getTime()-beginTime.getTime();

    }

    else stopTime.setTime(beginTime.getTime()+duration)

    target[targetProperty]=closure(duration);

  }

}

function StoryBoard(Duration,onfinish,flag)

{

  onfinish=onfinish||function(){};

  var r=new Array();

  r.appendAnimation=function(animation)

  {

    if(animation instanceof Animation)

      this.push(animation);

  }

  r.removeAnimation=function(animation)

  {

    for(var i=0;i<r.length;i++)

    {

      if(r[i]==animation)

      {

        r.splice(i,1);

        break;

      }

    }

  }

  r.start=function(){    

    for(var i=0;i<r.length;i++)

    {

      r[i].Begin();

    }

    setTimeout(

      function(){

        for(var i=0;i<r.length;i++)

        {

          r[i].Stop(Duration);

        }

      },

      Duration

    );

    onfinish();

  }

  return r;

}

//////////////////////////////下面是使用方法////////////////////////////////

function $(id)

{

   return document.getElementById(id);

}

var a1=new Animation($("output1"),"value");

var a2=new Animation($("output2"),"width",function(x){return Math.floor(x/10);});

var a3=new Animation($("output3").style,"filter",function(x){return "alpha(opacity="+Math.floor(x/5000*100)+")";});

var a4=new Animation($("output4").style,"width",function(x){return Math.floor(x*x*x/50000/5000)+"px";});

var s=new StoryBoard(5000);

s.appendAnimation(a1);

s.appendAnimation(a2);

s.appendAnimation(a3);

s.appendAnimation(a4);

s.start();

</script>

<pre>

output1是改变value

output1是改变宽度

output3是淡入

output4是带缓动的宽度

</pre>

相关推荐