Lottie 动画
Lottie 可以播放通过 Bodymovin 导出的 Adobe After Effects 动画。
Eva.js 的 Lottie 插件支持 Lolita 导出的动画。
安装
使用 NPM
npm i @eva/plugin-renderer @eva/plugin-renderer-lottie -S
在浏览器中
<script src=“https://unpkg.com/@eva/plugin-renderer-lottie@1.2.x/dist/EVA.plugin.renderer.lottie.min.js“></script>
使用
import { Game, GameObject, resource } from ‘@eva/eva.js’import { RendererSystem } from ‘@eva/plugin-renderer’import { LottieSystem, Lottie } from ‘@eva/plugin-renderer-lottie’resource.addResource([{name: ‘Halo’,// @ts-ignoretype: ‘LOTTIE’,src: {json: {type: ‘json’,url: ‘https://gw.alipayobjects.com/os/bmw-prod/61d9cc77-12de-47a7-b6e5-06c836ce7083.json‘,},},},{name: ‘Red’,// @ts-ignoretype: ‘LOTTIE’,src: {json: {type: ‘json’,url: ‘https://gw.alipayobjects.com/os/bmw-prod/e327ad5b-80d6-4d3f-8ffc-a7dd15350648.json‘,},},},]);const game = new Game({systems: [new RendererSystem({canvas: document.querySelector(‘#canvas’),width: 750,height: 1624,transparent: true,}),new LottieSystem(),],autoStart: true,frameRate: 60,});game.scene.transform.size = {width: 750,height: 1624,};const halo = new Lottie({resource: ‘Halo’});const red = new Lottie({resource: ‘Red’});halo.on(‘complete’, () => {console.log(‘halo play complete !’);});red.on(‘complete’, () => {console.log(‘Red play complete !’);});halo.play([], {repeats: 0});red.play([], {repeats: 0,slot: [{name: ‘#number’,type: ‘TEXT’,value: ‘10’,style: {fontSize: 64,},},{name: ‘#unit’,type: ‘TEXT’,value: ‘元’,style: {fontSize: 22,},},{name: ‘#title’,type: ‘TEXT’,value: ‘我是主标题’,style: {fontSize: 32,},},{name: ‘#subtitle’,type: ‘TEXT’,value: ‘我是副标题’,style: {fontSize: 24,},},],});red.onTap(‘#btn’, () => {console.log(‘btn click !’);});const haloGameObj = new GameObject(‘Halo’, {anchor: {x: 0,y: 0,},});const redGameObj = new GameObject(‘Red’, {anchor: {x: 0.5, y: 0.3},size: {width: 660, height: 757},origin: {x: 0.5, y: 0.5},});haloGameObj.addComponent(halo);redGameObj.addComponent(red);game.scene.addChild(haloGameObj);game.scene.addChild(redGameObj);
参数
- resource 资源名称
方法
LottieComponent.play
播放动画
LottieComponent.play([], { repeats: Infinity })LottieComponent.play([0, 10])
参数
| 说明 | 类型 | 默认值 |
|---|---|---|
| 播放动画帧率区间,默认从第一帧播放至最后一帧。 | Array<number, number> | [start, end] |
| repeate: 播放次数,Infinity 循环播放。 | number | Infinity |
slot:
- name: 插槽的名字。
- type: 插槽的类型,区分文字及图片。
- value: 插槽要填入的值,图片则为 CDN 链接。
- style:插槽的样式设置。
interface options {repeats?: numberslot?: Array<{name: string;type: ‘TEXT’ | ‘IMAGE’;value: string;style: IStyle;}>}
IStyle
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| x | position.x | number | |
| y | position.y | number | |
| width | bounds.width | number | |
| height | bounds.height | number | |
| anchor | 文档 | {x: number, y: number } | {x: 0, y: 0} |
| pivot | 文档 | {x: number, y: number } | {x: 0, y: 0} |
| TextStyle | 文档 | PIXI.TextStyle |
LottieComponent.onTap
为 Lottie 中的插槽元素绑定 Tap 事件
LottieComponent.onTap(‘#btn’, () => {console.log(‘btn click !’)})
参数
| 说明 | 类型 | 默认值 |
|---|---|---|
| 插槽名称 | string | |
| 点击后的事件回调 | () => void |
事件
,
LottieComponent.on(‘complete’, () => {console.log(‘LottieComponent play complete !’)})
