Mootools Fx小议
其实谈不上什么"小议", 有空的时候看看Mootools的源码,觉得Fx动画类的实现确实很妙,Fx的本质就是对一个数值量进行控制, 通过Fx.Transition扩展的曲线函数来确定数值变化的速度. 这一原理作用到DOM元素的style属性上, 就出现了让人兴奋的animation效果. Fx的源码并不难理解, 而且方法很清晰, 一开始看的时候, 觉得Fx的set方法有点奇怪:
set: function(now){
return now;
}
总想找到类似:
this.now...
这样的代码, 觉得Fx的实例应该有个属性来记录当前的变化的值, 又看到其step中的用法:
step: function(now){
if (this.options.frameSkip){
var diff = (this.time != null) ? (now - this.time) : 0, frames = diff / this.frameInterval;
this.time = now;
this.frame += frames;
} else {
this.frame++;
}
if (this.frame < this.frames){
var delta = this.transition(this.frame / this.frames);
this.set(this.compute(this.from, this.to, delta));
} else {
this.frame = this.frames;
this.set(this.compute(this.from, this.to, 1));
this.stop();
}
}
很容易看出来:
this.compute(this.from, this.to, delta)
此语句返回当前变化的值. 再稍微一想(比如Fx.Tween的实现), set方法最终要override才有意义. 基于这样的原理我自己写了个NumFx, 实现一个范围内数字的变化:
输出效果很有意思, 你可以明显的感受到数字变化的速度, 我们通过覆写set方法, 在实例每步调用step方法的过程中通过set来更新当前的值, 通过覆写step方法,增加了自定义事件step的触发.这样页面上就能实时的反应结果了.
最后,我想说:mootools, more than awesome! 欢迎讨论 : )

浙公网安备 33010602011771号