| /** | 
|  * Created by 张思奇 on 16/9/28. | 
|  * tween.js实现补间动画 | 
|  */ | 
|   | 
| //使用函数的闭包包裹整个动画代码 | 
| //自运行函数  ~表示js的自动解析  浏览器看见~就会自动执行之后的函数 | 
| ~function(){ | 
|   | 
|     /* | 
|      t timer动画已执行的时间 | 
|      b begin动画执行前的起始位置 | 
|      d duration动画的持续执行时间 | 
|      c change动画要移动的距离(动画要变动的数值范围) | 
|      返回值  得到动画在t这个时间点需要的具体坐标(数值) | 
|     * */ | 
|     function linear(t,b,d,c) { | 
|        return c*t/d +b; | 
|     } | 
|   | 
|     /* | 
|     *  curEle  要做动画的元素 | 
|     *  dest   动画运动的目标值  { left:400,top:300,width:400,opacity: 0  } | 
|     *  duration 动画的持续时间 | 
|     *{ left:400,top:300,width:400,opacity: 0  } | 
|     * callback是回调函数  希望在动画结束时调用 | 
|     * */ | 
|     function startAnimation(curEle,dest,duration,callback) | 
|     { | 
|   | 
|         //1.动画的初始化  计算属性的起始值 和需要改变多少值 | 
|         //begin是个对象 用来保存目标属性的起始值 里面所有的属性名和dest里面的属性名对应 | 
|         //change也是对象,用来保存目标属性需要变化的值,里面所有的属性名和dest里面的也对应 | 
|         var  begin={}, change={}; | 
|         for(var key in dest) | 
|         { | 
|               if(dest.hasOwnProperty(key)) | 
|               { | 
|                   begin[key]  =  css(curEle,key); | 
|                   change[key]=dest[key]-begin[key]; | 
|               } | 
|         } | 
|         //2.启动周期定时器,定时执行移动的方法 | 
|         //a.每一次动画开始之前要清除前一次动画的定时器 | 
|         window.clearInterval(curEle.animTimer); | 
|         //用来累计动画已经播放了多长时间 | 
|         var totalTime=0; | 
|         curEle.animTimer=window.setInterval(move,10); | 
|   | 
|         //b 定义负责每一次修改动画值的函数move | 
|         function move() { | 
|             totalTime+=10; | 
|             //累计完时间判断是否动画结束 | 
|             if(totalTime>=duration) | 
|             { | 
|                 // for(var key in dest) | 
|                 // { | 
|                 //     if(dest.hasOwnProperty(key)) | 
|                 //     { | 
|                 //         //把位置全都定位最终值 | 
|                 //         css(curEle,key,dest[key]); | 
|                 //     } | 
|                 // } | 
|                 css(curEle,dest); | 
|   | 
|                 window.clearInterval(curEle.animTimer); | 
|   | 
|                 if(typeof callback==="function") | 
|                 { | 
|                     callback(); | 
|                 } | 
|                 return; | 
|             } | 
|             //计算这个时间刻,动画需要改变的所有属性的值 | 
|             for(key in dest ) | 
|             { | 
|                  if(dest.hasOwnProperty(key)) | 
|                  { | 
|                       curPos= linear(totalTime,begin[key],duration,change[key]); | 
|                      css(curEle,key,curPos); | 
|                  } | 
|             } | 
|         } | 
|     } | 
|     window.tween=startAnimation; | 
| }(); |