转自:https://www.cnblogs.com/chengguanhui/p/4664144.html
在讲tween类之前,不得不提的是贝塞尔曲线了。首先,贝塞尔曲线是指依据四个位置任意的点坐标绘制出的一条光滑曲线。它在作图工具或动画中中运用得比较多,例如PS中的钢笔工具,firework中的画笔等等。无论运用在哪里,它们的原理都是一样的。同样,在用js实现运动效果时,我们也可以利用贝塞尔曲线来实现不同的特效,而tween.js就是一个封装好的计算辅助算法。你可以通过连续输入多个值,然后利用贝塞尔曲线公式输出不同的值,最终形成了一条光滑的曲线。因为一条曲线上的值的不一样的,所以我们可以利用曲线的特性创造出不同的效果。
tween.js封装了多种效果的计算方法,我们可以利用里面的公式或者自己重写方法。以下是源代码,可根据自己的需要增删使用。
 点击展开源代码下载地址:http://pan.baidu.com/s/1sjQdWQx
这个算法可以用在很多地方,如果滚动条的移动,物块的移动或各种渐变等等。
 1             //利用tween.js返回特殊值,生成不同效果
 2             function tweenFn(obj,attr,value,endFn){
 3                 var timer = null;
 4                 var start = 0;        //开始位置
 5 //                var value = value        //改变值大小
 6                 var t = 0;                //从0步开始
 7                 var endT = 30;            //结束步数
 8                 clearInterval(timer);
 9                 timer = setInterval(function(){
10                             t++;
11                             if(t>endT){
12                                 clearInterval(timer);
13                                 endFn && endFn();//回调函数存在则返回
14                                 return;
15                             };
16                         obj.style[attr] = Tween.Cubic.easeInOut(t,start,value,endT)+"px";
17                 },30);
18             }
函数说明:obj,绑定执行的对象;
attr,改变的属性值;
value,改变值的大小;
endFn,执行完毕的回调函数,没有可不写;
start,属性初始值;
t,endT,执行的步数,可理解为分多少次执行完。
函数第十六行中Tween.Cubic.easeInOut(...)为调用tween.js中的方法,可根据实际需求修改Cubic或easeInOut的值。我把里面所有的方法列表如下:
| Linear | 线性匀速变化 | ||||
| Quad | easeIn
 easeOut easeInOut  | 
二次方缓动 | Expo | easeIn
 easeOut easeInOut  | 
指数曲线缓动 | 
| Cubic | easeIn
 easeOut easeInOut  | 
三次方缓动 | Circ |  easeIneaseOut
 easeInOut  | 
圆周曲线缓动 | 
| Quart |  easeIneaseOut
 easeInOut  | 
四次方缓动 | Elastic |  easeIneaseOut
 easeInOut  | 
弹性伸缩缓动 | 
| Quint | easeIn
 easeOut easeInOut  | 
五次方缓动 | Back |  easeIneaseOut
 easeInOut  | 
返回缓动 | 
| Sine |  easeIneaseOut
 easeInOut  | 
正弦曲线缓动 | Bounce |  easeIneaseOut
 easeInOut  | 
跳动缓动 | 
