这是 bodymovin 插件说明的中文版,由BigXiXi翻译, 原文地址: https://github.com/bodymovin/bodymovin
注意!项目中除了 readme 保持更新,其他文件最新版请移步原版获取。
文中 After Effects 术语参考自官方中文版 AE 。
After Effects 插件,用于将动画导出为 svg/canvas/html + js 。
直接从 adobe 在线商店获取!
https://creative.adobe.com/addons/products/12557
支持 AE CC2014 及以上版本。
如果需要最最新的版本,可以从这里安装:
关闭 After Effects
打包为 zip 下载整个项目到本地并解压 build/extension/bodymovin.zxp 文件到 Adobe CEP 文件夹( CEP 插件扩展平台):
WINDOWS:
C:\Program Files (x86)\Common Files\Adobe\CEP\extensions 或者
C:<用户名>\AppData\Roaming\Adobe\CEP\extensions
MAC:
/Library/Application\ Support/Adobe/CEP/extensions/bodymovin
(你可以在终端中输入:
cp -R 你解压后的目录 /extension /Library/Application\ Support/Adobe/CEP/extensions/bodymovin
然后输入:
ls /Library/Application\ Support/Adobe/CEP/extensions/bodymovin
来保证正确复制了文件)
编辑注册表:
WINDOWS:
找到注册表键值 HKEY_CURRENT_USER/Software/Adobe/CSXS.6 增加一个键值名为 PlayerDebugMode, 类型为字符串(String), 值为 1 。
MAC:
打开文件 ~/Library/Preferences/com.adobe.CSXS.6.plist ( com.adobe.CSXS.???.plist 其中问号根据 AE 版本不同会有不同) 新加一行,键(key)为 PlayerDebugMode, 类型为字符串(String), 值为 1 。
按照官方手册的指导安装 zxp 插件,地址如下(英文):
https://helpx.adobe.com/x-productkb/global/installingextensionsandaddons.html
直接跳到 "Install third-party extensions"
编辑 > 首选项 > 常规 > 允许脚本写入文件和访问网络
( Mac 下为 After Effects > 首选项 > 常规 > 允许脚本写入文件和访问网络
)。窗口 > 扩展 > bodymovin
[Window > Extensions > bodymovin
]分段: 分段导出你的动画。 如果你的动画有很多层,可以选择分段导出,这样就不会一次性全部加载。 导出工具将会根据图层开始时间进行分段。
快照: 保存一张 svg 格式的快照作为动画的封面。渲染完动画后, 你可以截取任意一帧快照并保存到硬盘上。 我建议优化这张 svg 快照,可以利用一些工具比如 https://jakearchibald.github.io/svgomg/ 并好好设置一番。
查看 demo ,有不同的动画加载方式:
<script src="js/bodymovin.js" type="text/javascript"></script>
你可以调用 bodymovin.loadAnimation() 来开始动画。 可以用一个对象传递这些参数:
bodymovin.loadAnimation({
container: element, // 渲染动画的 dom 元素
renderer: 'svg',
loop: true,
autoplay: true,
animationData: JSON.parse(animationData) // 动画数据
});
bodymovin.loadAnimation({
container: element, // 渲染动画的 dom 元素
renderer: 'svg',
loop: true,
autoplay: true,
animationData: animationData, // 动画数据
rendererSettings: {
context: canvasContext, // canvas 画布上下文
scaleMode: 'noScale',
clearCanvas: false
}
});
如果你这么做了, 必须在每一帧渲染后清除画布。
另一个加载动画的办法是为 dom 元素加上特定的属性。
你需要包含一个 div 元素,并设置他的 class 为 bodymovin 。
如果你在页面加载前这么做了,它将自动检测页面上所有 class 标签值为"bodymovin"的元素。
或者你可以在页面加载完成后调用 bodymovin.searchAnimations(),同样会检测页面上所有 class 标签值为"bodymovin"的元素。
步骤:
必要属性
一个名为"bodymovin"的 class
一个 "data-animation-path" 属性,值为 data.json 的相对路径。
可选属性
一个 "data-anim-loop" 属性,控制循环。
一个 "data-name" 属性,用于指定一个名字作为播放控制的控制目标。
示例
<div style="width:1067px;height:600px" class="bodymovin" data-animation-path="animation/" data-anim-loop="true" data-name="ninja"></div>
动画实例可用的方法如下:
anim.play()
anim.stop()
anim.pause()
anim.setSpeed(speed) -- 播放速度 , 1 为正常速度。
anim.goToAndStop(value, isFrame) 跳转到某一时间(或帧)并停在那。第一个参数(value)是数值。第二个参数是布尔值,"true"则第一个参数表示“帧”,“ false ”则表示“时间”。
anim.goToAndPlay(value, isFrame) 跳转到某一时间(或帧)并播放。第一个参数(value)是数值。第二个参数是布尔值,"true"则第一个参数表示“帧”,“ false ”则表示“时间”。
anim.setDirection(direction) -- 播放方向,正数和 0 为正常播放,负数为倒放。
anim.playSegments(segments, forceFlag) -- 播放指定段落。第一个参数是一个数组,形式为[(a,b),(c,d),(e,f)...]则播放第 a 帧到 b 帧,然后第 c 帧到 d 帧, e 到 f …… ,第二个参数为布尔值,“ true ”则立刻播放参数一中的片段,“ false ”则播放完当前动画后再开始播放片段。
anim.destroy()
bodymovin 有 8 个方法:
bodymovin.play() -- 播放指定动画, 1 个参数动画名。
bodymovin.stop() -- 停止播放指定动画, 1 个参数动画名。
bodymovin.setSpeed() -- 第一个参数设置动画速度 (1 为正常速度),第二个参数动画名可选。
bodymovin.setDirection() -- f 播放方向,正数和 0 为正常播放,负数为倒放,第二个参数动画名可选。
bodymovin.searchAnimations() -- 检测 class 值为"bodymovin"的元素。
bodymovin.loadAnimation() -- 前面已有介绍, 返回一个可单独控制的动画实例。
bodymovin.destroy() --销毁和释放资源。 DOM 元素将会被清空。
bodymovin.registerAnimation() -- 你可以直接用 registerAnimation 来注册一个自定义元素,它必须包含"data-animation-path"属性并指向 data.json 的地址。
bodymovin.setQuality() -- 画质设置,调整动画播放器性能。默认为高画质(high), 可选值为'high'、'medium'、'low', 或者大于 1 的数字。对于有的动画这些设置差别不大。
或者你可以对以下事件设置监听(addEventListener):
查看 demo 文件夹中的例子,或者访问 http://codepen.io/airnan/ 可以看到精彩的演示动画
如果你使用了图片资源或者未转成形状图层的 Adobe Illustrator 文件图层, 将会同时生成一个 images 文件夹存放这些图片资源。(我建议将 ai 图层转换为形状图层,这样他们会被导出为矢量数据,只需在 AE 中导入的 ai 图层上右键 > 从矢量图层创建形状) 注意,如果不同的带图片资源的动画导出到同一地址, images 文件夹将会被覆盖。
Bodymovin 的动画都是实时渲染的。 虽然经过了大量优化,最好还是控制 AE 工程文件体积在一个必要的值。
更多的优化也正在进行中,但请避免这种情况:绘制了一个巨大的形状图层,但是只通过遮罩使用其中一小部分。
过多的节点同样会影响性能。
如果你有动画导出失败或者想让我帮你导出, 不要犹豫请告诉我。
我很乐意能找到这个插件的不足之处。
我的邮箱是 [email protected]
1
fhefh 2017-03-22 23:07:25 +08:00
这个不错 666
|
2
designer 2017-03-23 00:46:09 +08:00 via iPhone
厉害
|
3
HiJony 2017-03-24 15:14:54 +08:00
感谢感谢,能不能顺便把 lottie 翻译下:D
|
4
bigxixi OP |
5
bigxixi OP |