说好的缓动呢?
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:editor 阅读 270
jQuery的缓动函数不给力,既然要写,先把需求列好:1.动画类型有:linear,easeIn,easeOut,easeInOut2.可以在缓动过程中改变属性,也可以是调用函数,并改变函数的参数(

jQuery的缓动函数不给力,既然要写,先把需求列好:

1. 动画类型有:linear, easeIn, easeOut, easeInOut

2. 可以在缓动过程中改变属性,也可以是调用函数,并改变函数的参数(后者是我的初衷,jq只支持属性 )

 

动画是怎样产生的?学过Flash的人应该知道帧,帧就是一个画面,通常一秒25帧,也就一秒播放25个画面,如此快速的放过去,静态也成了动态(当然,前提是25个画面不是同一个画面,囧。。。)

 

难道做动画要画N多图,好吧,这叫“逐帧动画”,如果你很闲大可以这么干,因为这样做的效果绝对是顶级的,毫无瑕疵的。但是我一点都不闲,我画画的水平连幼儿园都教不了,所以这条路可以直接枪毙。

 

接下来进入正题,Flash中还有关键帧的概念,举个例子,关键帧A,物体box的宽高为100,关键帧B,box的宽高为50,A与B之间有25帧,接着我们从A播放到B,效果就是box在1秒内不断缩小,这叫“补间动画”。
 

这里涉及到三个东西:动画对象(box),动画属性(width, height),动画时间(1秒)

我们要做的事就是在某个时间点确定动画属性的值

 

常见的动画有四种类型,介绍一下:

          linear:线性动画,即匀速

        easeIn:速度从小到大,即淡入

    easeOut :速度从大到小,即淡出

  easeInOut:开始时速度从小到大,结束时速度从大到小,即淡入淡出
 

====================下面这段爱看不看,估计看着挺无聊的===========================

其实说到缓动,就不得不提Robert Penner,他发明了N多缓动公式,举个例子

  

我还是解释一下吧:

  设当前变化量为X,则

  t / d = X / c,所以X = c * t / d,然后X + b就可以获得当前属性值
 

再看一个稍复杂的:

这个有淡入效果,也就是说动画开始时,值的变化量从小到大。

可以发现两者唯一的区别就是 t / d 和 (t /= d) * t,刚才说了t / d是一个>=0 && <=1的比值,暂取名为a,而(t /= d) * t就相当于Math.pow(a, 2)。  

为什么要平方呢?

1. 首先a >= Math.pow(a, 2)是肯定的

2. 每次调用函数时,t / d 这个比值也是匀速变大的,比如第1次调用时是0.1(平方0.01),第2次调用时是0.2(平方0.04)等,那第10次调用时,肯定是1没错吧,这时候 c * 1 + b,动画就到此结束了

3. 第2点证明了比值越小,值的变化量就越小,比值越大,值的变化量就越大,如果不用平方而是三次方,那淡入效果就更明显了。

 

举个两个例子,可以看出一些规律,公式大体便是 当前属性值 = 总变化量 * 增量系数 + 初始值, 其中,增量系数根据不同算法各有不同。  

====================继续往下看吧===========================  

增量系数的算法,必须收藏啊!!

  

你会发现有Quad,Cubic,Quart之类的字眼,这些到底是啥意思呢,这里我给出Flash的Tweener 官方文档,一看便知了(如果下面是空白,表示在缓冲,为了看到这么好的演示,耐心等会吧)

根据上述知识点,我的动画函数便出炉了

  

 

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2