/** 
 | 
 * 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; 
 | 
}(); 
 |