Lottie 动画

      Lottie 可以播放通过 Bodymovin 导出的 Adobe After Effects 动画。

      Eva.js 的 Lottie 插件支持 Lolita 导出的动画。

      安装

      使用 NPM

      1. npm i @eva/plugin-renderer @eva/plugin-renderer-lottie -S

      在浏览器中

      1. <script src=https://unpkg.com/@eva/plugin-renderer-lottie@1.2.x/dist/EVA.plugin.renderer.lottie.min.js></script>

      使用

      1. import { Game, GameObject, resource } from ‘@eva/eva.js’
      2. import { RendererSystem } from ‘@eva/plugin-renderer’
      3. import { LottieSystem, Lottie } from ‘@eva/plugin-renderer-lottie’
      4. resource.addResource([
      5. {
      6. name: ‘Halo’,
      7. // @ts-ignore
      8. type: ‘LOTTIE’,
      9. src: {
      10. json: {
      11. type: ‘json’,
      12. url: https://gw.alipayobjects.com/os/bmw-prod/61d9cc77-12de-47a7-b6e5-06c836ce7083.json,
      13. },
      14. },
      15. },
      16. {
      17. name: ‘Red’,
      18. // @ts-ignore
      19. type: ‘LOTTIE’,
      20. src: {
      21. json: {
      22. type: ‘json’,
      23. url: https://gw.alipayobjects.com/os/bmw-prod/e327ad5b-80d6-4d3f-8ffc-a7dd15350648.json,
      24. },
      25. },
      26. },
      27. ]);
      28. const game = new Game({
      29. systems: [
      30. new RendererSystem({
      31. canvas: document.querySelector(‘#canvas’),
      32. width: 750,
      33. height: 1624,
      34. transparent: true,
      35. }),
      36. new LottieSystem(),
      37. ],
      38. autoStart: true,
      39. frameRate: 60,
      40. });
      41. game.scene.transform.size = {
      42. width: 750,
      43. height: 1624,
      44. };
      45. const halo = new Lottie({resource: ‘Halo’});
      46. const red = new Lottie({resource: ‘Red’});
      47. halo.on(‘complete’, () => {
      48. console.log(‘halo play complete !’);
      49. });
      50. red.on(‘complete’, () => {
      51. console.log(‘Red play complete !’);
      52. });
      53. halo.play([], {repeats: 0});
      54. red.play([], {
      55. repeats: 0,
      56. slot: [
      57. {
      58. name: ‘#number’,
      59. type: ‘TEXT’,
      60. value: ‘10’,
      61. style: {
      62. fontSize: 64,
      63. },
      64. },
      65. {
      66. name: ‘#unit’,
      67. type: ‘TEXT’,
      68. value: ‘元’,
      69. style: {
      70. fontSize: 22,
      71. },
      72. },
      73. {
      74. name: ‘#title’,
      75. type: ‘TEXT’,
      76. value: ‘我是主标题’,
      77. style: {
      78. fontSize: 32,
      79. },
      80. },
      81. {
      82. name: ‘#subtitle’,
      83. type: ‘TEXT’,
      84. value: ‘我是副标题’,
      85. style: {
      86. fontSize: 24,
      87. },
      88. },
      89. ],
      90. });
      91. red.onTap(‘#btn’, () => {
      92. console.log(‘btn click !’);
      93. });
      94. const haloGameObj = new GameObject(‘Halo’, {
      95. anchor: {
      96. x: 0,
      97. y: 0,
      98. },
      99. });
      100. const redGameObj = new GameObject(‘Red’, {
      101. anchor: {x: 0.5, y: 0.3},
      102. size: {width: 660, height: 757},
      103. origin: {x: 0.5, y: 0.5},
      104. });
      105. haloGameObj.addComponent(halo);
      106. redGameObj.addComponent(red);
      107. game.scene.addChild(haloGameObj);
      108. game.scene.addChild(redGameObj);

      参数

      • resource 资源名称

      方法

      LottieComponent.play

      播放动画

      1. LottieComponent.play([], { repeats: Infinity })
      2. LottieComponent.play([0, 10])

      参数

      说明类型默认值
      播放动画帧率区间,默认从第一帧播放至最后一帧。Array<number, number>[start, end]
      repeate: 播放次数,Infinity 循环播放。numberInfinity

      slot:

      • name: 插槽的名字。
      • type: 插槽的类型,区分文字及图片。
      • value: 插槽要填入的值,图片则为 CDN 链接。
      • style:插槽的样式设置。

      1. interface options {
      2. repeats?: number
      3. slot?: Array<{
      4. name: string;
      5. type: ‘TEXT’ | ‘IMAGE’;
      6. value: string;
      7. style: IStyle;
      8. }>
      9. }

      IStyle

      参数说明类型默认值
      xposition.xnumber
      yposition.ynumber
      widthbounds.widthnumber
      heightbounds.heightnumber
      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 事件

      1. LottieComponent.onTap(‘#btn’, () => {
      2. console.log(‘btn click !’)
      3. })

      参数

      说明类型默认值
      插槽名称string
      点击后的事件回调() => void

      事件

      1. LottieComponent.on(‘complete’, () => {
      2. console.log(‘LottieComponent play complete !’)
      3. })
      ,