Motion

概览

这是名为 MotionJavascript 动画组件。它能够帮助您不依赖 Javascript 框架即可简单、高效地完成复杂的动画效果。

特性

下载

您可以从下面的连接获得最新稳定版本

还可以查看所有 Motion 的历史版本,见证 Motion 的完善历程。

您还可以直接通过 SVN 获得最新测试版本(不适用于实际生产环境)。

起步

动画,从哲学的角度上讲就是不断改变自身的属性。所以在开始进行动画时,您需要了解以下些参数:

下面是简单的实例:

实例化

在引入动画组件后,首先就是实例化一个动画类。例如:

var motion = new Motion('linear', 500);

其中包含了两个参数,分别是动画类型时长

设置回调

Motion 提供回调的方式扩展,常见的回调使用 onTweening,即在动画运行中的进行的操作:

var sample = document.getElementById('sample');
var interval = {from: 0, to: 500};
motion.onTweening = function() {
    sample.style.width = this.equation(interval.from, interval.to) + 'px';
}; 

其中,this.equation 则是根据上述实例化时生成的动画函数,他需要两个参数 -- 即动画区间的开始和结束,返回的是当前帧的位置。

下面是目前 Motion 支持的回调接口:

0.3 版本以后新增

开始和停止

设置好动画参数以后,即可开始动画查看最终效果。

开始动画使用:

motion.start();

停止动画使用:

motion.sleep();

0.3 版本以后新增

暂停动画使用:

motion.wakeup();

恢复动画使用:

motion.stop();

例如,通常我们会将其绑定到某元素的事件中开始动画:

var trigger = document.getElementById('trigger');
trigger.onclick = function() {
    if (motion.tweening) { // 如果动画在行进中,则停止
        motion.stop();
    }
    motion.start(); // 开始动画
};

万事俱备

就这样我们完成了基本的动画,我们来看下效果。

好了,我们来看下最终代码:

var motion  = new Motion('linear', 500);
var sample  = document.getElementById('sample');
var trigger = document.getElementById('trigger');

motion.onTweening = function() {
    sample.style.width = this.equation(0, 500) + 'px';
};

trigger.onclick = function() {
    if (motion.tweening) { // 如果动画在行进中,则停止
        motion.stop();
    }
    motion.start(); // 开始动画
};

更快更好

如果我们想换个动画效果,那么只要该一下参数就可以啦。例如上面的例子,我们改成

var motion = new Motion('backOut', 500);

然后再点击试试看,这会很容易,对不?

如果需要查看所有 Motion 内置的动画类型,您可使用:

Motion.getTweens();

它将返回一个对象(Object),其中包含此组件内置的所有动画公式。

样例

我希望通过 Motion 能够实现尽可能多的动画效果,下面是些样例。 如果您也有精彩的例子,欢迎您提交给我。

运行轨迹

根据动画参数,返回相应的动画轨迹以及状态。

柱状统计图

根据上述的例子,发展而来的柱状统计图。

Slider Menu by 桑拿院的小伙子

Slider Menu 实例,感谢 桑拿院的小伙子 提供

问答

天啊,又多了款这样(类似)的脚本,让我如何选择?

没有最好的,只有更适合的。或许其他同类型的脚本也能很好的 完成工作(包括很多库中的动画组件能够完成更好的效果)。

本人编写该组件的目的,除了能让您能高效率完成动画效果的 同时,也希望您能了解动画组件的原理。

而且完成这些复杂效果只需要 3KB (压缩后)并且可以定制,何乐而不为 :^)

该动画组件支持哪些浏览器?

经过本人的测试,主流的浏览器普遍都被支持。其中包括 Internet Explorer(6/7/8) 、最新版本的 Firefox、Safari、Chrome 以及 Opera,其他支持 Javascript 的浏览器也应该可被支持。

欢迎您提供相应的其他浏览器的兼容情况。

为什么使用 this.equation,而非直接内部计算出当前帧的位置?

动画有多种类型,但从实质上说就是不断的改变某具体对象 的属性值。本人认为动画组件应该做的,只要提供公式,然后计算在相应的帧改变的位置即可。

同时这样做的另个好处就是可以同时控制多个动作,而不需要声 明多个动画组件(只要他们的动画类型、时长都一致)。

我想重复运行某个动画,怎么办?

可以考虑回调实现改功能,例如在动画完成时重新执行开始

motion.onComplete = function() {
    this.start();
};

当然可以考虑加入相应的参数,但我发现使用回调也能很好、而且很清楚的工作。

我发现了个 Bug,怎么办?

在您发现是 Motion 本身的 Bug 时,欢迎您提出来并主动联系我。 如果您对于 Motion 有更好的优化意见和建议,也欢迎您不吝提出。

怎样才能联系到作者?

您可以通过电子邮件或者 Gtalk 和我联系 i.feelinglucky[at]gmail.com; 或者访问我的 Blog

$Id: index.php 220 2009-04-07 05:11:40Z i.feelinglucky $
Gracecode.com
Yahoo 统计