利用tween.js算法生成缓动效果 转

转自: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

跳动缓动
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注