转自: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 |
跳动缓动 |