Lottie 是一个适用于网页、Android 和 iOS 的移动端库,它解析使用 Adobe After Effects 导出为 json 格式的动画(通过 Bodymovin),并在移动端原生渲染它们!
设计师们第一次可以创建并发布精美的动画,而无需工程师费力地手动重新创建。俗话说,一图胜千言,这里有 13000 字的解读。
从 aescripts + aeplugins 下载: http://aescripts.com/bodymovin/
或从 Adobe 商店获取: https://creative.adobe.com/addons/products/12557 CC 2014 及更高版本。
关闭 After Effects。
将压缩文件解压到 `build/extension/bodymovin.zxp` ,然后复制到 Adobe 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 YOURUNZIPEDFOLDERPATH/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` 的项,类型为字符串,值为 `1`。
Mac
打开文件 `~/Library/Preferences/com.adobe.CSXS.6.plist` 并添加一行,键名为 `PlayerDebugMode`,类型为字符串,值为 `1`。
按照此处的说明手动安装 zxp:https://helpx.adobe.com/x-productkb/global/installingextensionsandaddons.html 直接跳到“安装第三方扩展”。
brew tap danielbayley/adobe
brew cask install lottie
# with npm
npm install lottie-web
# with bower
bower install bodymovin
或者您可以使用此处的脚本文件:https://cdnjs.com/libraries/bodymovin 或者直接从 AE 插件中点击“获取播放器”。
这里是一个视频教程,解释如何导出基本动画并在 HTML 页面中加载它。
在您的 html 中包含 .js 文件(记住为生产环境 gzip 压缩它)。
<script src="js/lottie.js" type="text/javascript"></script>
您可以调用 lottie.loadAnimation() 来启动动画。它采用一个对象作为唯一参数,其中包含:
它返回您可以使用 play、pause、setSpeed 等方法控制的动画实例。
lottie.loadAnimation({
container: element, // the dom element that will contain the animation
renderer: 'svg',
loop: true,
autoplay: true,
path: 'data.json' // the path to the animation json
});
查看此 wiki 页面以了解每个设置的说明。https://github.com/airbnb/lottie-web/wiki/Composition-Settings
动画实例具有以下主要方法:
href
:通常传递为 `location.href`。当您在 Safari 中遇到蒙版问题(您的 url 没有 `#` 符号)时,它非常有用。speed
:1 为正常速度。value
:数值。isFrame
:定义第一个参数是基于时间的值还是基于帧的值(默认为 false)。value
:数值。isFrame
:定义第一个参数是基于时间的值还是基于帧的值(默认为 false)。direction
:1 为正向,-1 为反向。segments
:数组。可以包含 2 个数值,用作动画的第一帧和最后一帧。或者可以包含一系列数组,每个数组包含 2 个数值。forceFlag
:布尔值。如果设置为 false,它将等到当前片段完成。如果设置为 true,它将立即更新值。
useSubFrames
:如果为 false,则将遵循原始 AE fps。如果为 true,则将在每个 requestAnimationFrame 更新中间值。默认为 true。
inFrames
:如果为 true,则以帧为单位返回持续时间;如果为 false,则以秒为单位返回持续时间。
updateTextDocumentData -- 更新文本图层的数据 更多信息
lottie.play() -- 可选参数 name 用于指定目标动画
lottie.stop() -- 可选参数 name 用于指定目标动画
lottie.setSpeed() -- 第一个参数为速度(1 为正常速度)-- 可选参数 name 用于指定目标动画
lottie.setDirection() -- 第一个参数为方向(1 为正常方向)-- 可选参数 name 用于指定目标动画
lottie.searchAnimations() -- 查找具有类 "lottie" 或 "bodymovin" 的元素
lottie.loadAnimation() -- 如上所述。返回一个动画实例以单独控制。
lottie.destroy() -- 用于销毁并释放资源。DOM 元素将被清空。
lottie.registerAnimation() -- 您可以使用 registerAnimation 直接注册元素。它必须具有指向 data.json url 的 "data-animation-path" 属性。
lottie.setQuality() -- 默认值为 'high',设置为 'high'、'medium'、'low' 或大于 1 的数字以提高播放器性能。在某些动画中,低至 2 也看不到任何区别。
您还可以使用 addEventListener 使用以下事件:
如果您想使用现有画布进行绘制,您可以传递一个额外的对象:'rendererSettings',其中包含以下配置。
lottie.loadAnimation({
container: element, // the dom element
renderer: 'svg',
loop: true,
autoplay: true,
animationData: animationData, // the animation data
rendererSettings: {
context: canvasContext, // the canvas context
scaleMode: 'noScale',
clearCanvas: false,
progressiveLoad: false, // Boolean, only svg renderer, loads dom elements when needed. Might speed up initialization for large number of elements.
hideOnTransparent: true, //Boolean, only svg renderer, hides elements when opacity reaches 0 (defaults to true)
className: 'some-css-class-name'
}
});
这样做,您将必须在每一帧后处理画布的清除。
另一种加载动画的方法是向 dom 元素添加特定属性。您必须包含一个 div 并将其类设置为“lottie”。如果您在页面加载前执行此操作,它将自动搜索所有具有类“lottie”的标签。或者您可以在页面加载后调用 `lottie.searchAnimations()`,它将搜索所有具有类“lottie”的元素。
必需
可选
示例
<div style="width:1067px;height:600px" class="lottie" data-animation-path="animation/" data-anim-loop="true" data-name="ninja"></div>
您可以预览或获取动画的 svg 快照以用作海报。渲染动画后,您可以获取动画中任何帧的快照并将其保存到磁盘。我建议您将 svg 通过 svg 优化器(如 https://jakearchibald.github.io/svgomg/)处理,并尝试调整其设置。
如果您有任何尚未转换为形状的图像或 AI 图层(我建议您将它们转换为形状,以便它们作为矢量导出,右键单击每个图层并执行:“从矢量图层创建形状”),它们将保存到相对于目标 json 文件夹的 images 文件夹中。注意不要覆盖同一位置上的现有文件夹。
这是实时渲染。虽然它已经过很好的优化,但如果您将 AE 项目保持在必要范围内,总是有帮助的。
更多优化正在进行中,但请尽量不要在 AE 中使用巨大的形状来仅仅遮罩其一小部分。
过多的节点也会影响性能。
如果您有任何无法工作的动画,或者希望我导出它们,请随时联系我。
我非常有兴趣了解该插件存在哪些问题。
我的邮箱是 hernantorrisi@gmail.com
首先 `npm install` 或 `bower install`,然后 `npm start`