说完了理论 ,我们来做点实事。这篇文章将介绍使用 Javascript 实现的动画组件。
下面记录下当时编写这个组件的考虑的些问题,对技术细节感兴趣的朋友,可以 到这里参看源代码 :
- 需要几个回调函数控制初始化、动画运行时、动画完成的情况
- 将动画精确到运行了几帧
- 使用 setInterval 还是 setTimeout,最后还是选择了 setInterval( 详细 )
- 不管元素需要更改那些属性,提供相应公式即可,但这可能带来性能问题
- 要可扩展、而且稳定
这个动画组件的用法简要的说明下,首先我们要确定元素从哪里移动(begin)到哪里(final),我们可以将两个信息绑定到一起,比如
var position = {from: 0, to: 100};
然后实例化个动画组件,指定动画的运行时长(duration)以及动画运行类型(tween)
var motion = new Motion(duration, tween);
另外,我们当然希望在动画初始化、开始以及进行和结束时候做额外的事情,那么加入相应 的回调:
// 初始化
motion.onInit = function() {
// ...
};
// 开始
motion.onStart = function() {
// ...
};
// 动画运行时
motion.onTweening = function() {
// 需要获取某个时间点的坐标时,可以使用 this.equation 方法
var p = this.equation(position.from, position.to);
};
// 动画完成时
motion.onComplete = function() {
// ...
};
当一切准备就绪,那么就可以开始动画了
motion.start();
当然,任何时候我们都希望能停止动画,那么就
motion.stop();
那么我们就可以通过这个动画组件完成常见的动画效果了。 这里有个 DEMO ,看下这个动画组件的实际使用例子。按照传统,代码可以在这里 打包下载 。
附,参考资源: YUI 的动画组件 、 mootools 的动画组件 。
-- 全文完 --
嗯 师兄果然是 油骨精
忘记说了。。。不是我干的。。。 http://www.reddit.com/r/programming/comments/77low/mars_in_256_bytes/
@est 嗯,也碰到过其他类似的。效果不错,不过实际代码不实用。
恭喜明城再次向多元化发展方向迈进重要一步。
明城兄弟对Timer可能有误解,setInterval并没有比setTimeout更好,可以参考:http://lifesinger.org/blog/?p=1184
应该会很卡吧.