• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Lottie
2
3提供Lottie动画。
4
5> **说明:**
6>
7> 从 API Version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10
11## 导入模块
12
13```
14import lottie from '@ohos/lottieETS'
15```
16
17> **说明:**
18>
19> 在第一次使用Lottie之前,需要在Terminal窗口运行 `ohpm install @ohos/lottieETS` 命令下载Lottie。
20>
21
22
23## lottie.loadAnimation
24
25loadAnimation(
26
27path: string, container: object, render: string, loop: boolean, autoplay: boolean, name: string ): AnimationItem
28
29加载动画,须提前声明Animator('__lottie_ets')对象,并在Canvas完成布局后调用。可配合Canvas组件生命周期接口onReady()使用。
30
31**参数:**
32
33| 参数             | 类型                          | 必填   | 描述                                       |
34| -------------- | --------------------------- | ---- | ---------------------------------------- |
35| path           | string                      | 是    | hap包内动画资源文件路径,仅支持json格式。示例:path: "common/lottie/data.json" |
36| container      | object                      | 是    | canvas绘图上下文,声明范式需提前声明CanvasRenderingContext2D。 |
37| render         | string                      | 是    | 渲染类型,仅支持“canvas”。                        |
38| loop           | boolean \| number | 否    | 动画播放结束后,是否循环播放,默认值true。值类型为number,且大于等于1时为设置的重复播放的次数。 |
39| autoplay       | boolean                     | 否    | 是否自动播放动画,默认值true。                        |
40| name           | string                      | 否    | 开发者自定义的动画名称,后续支持通过该名称引用控制动画,默认为空。        |
41| initialSegment | [number, number]       | 否    | 指定动画播放的起始帧号,指定动画播放的结束帧号。                 |
42
43
44## lottie.destroy
45
46destroy(name: string): void
47
48销毁动画,页面退出时,必须调用。可配合Canvas组件生命周期接口使用,比如onDisappear()与onPageHide()。
49
50**参数:**
51
52| 参数   | 类型     | 必填   | 描述                                       |
53| ---- | ------ | ---- | ---------------------------------------- |
54| name | string | 是    | 被指定的动画名,同loadAnimation接口参数name, 缺省时销毁所有动画。 |
55
56**示例:**
57  ```ts
58  // xxx.ets
59  import lottie from '@ohos/lottieETS'
60
61  @Entry
62  @Component
63  struct Index {
64    private controller: CanvasRenderingContext2D = new CanvasRenderingContext2D()
65    private animateName: string = "animate"
66    private animatePath: string = "common/lottie/data.json"
67    private animateItem: any = null
68
69    onPageHide(): void {
70      console.log('onPageHide')
71      lottie.destroy()
72    }
73
74    build() {
75      Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
76        Canvas(this.controller)
77        .width('30%')
78        .height('20%')
79        .backgroundColor('#0D9FFB')
80        .onReady(() => {
81          console.log('canvas onAppear');
82          this.animateItem = lottie.loadAnimation({
83            container: this.controller,
84            renderer: 'canvas',
85            loop: true,
86            autoplay: true,
87            name: this.animateName,
88            path: this.animatePath,
89          })
90        })
91
92        Animator('__lottie_ets') // declare Animator('__lottie_ets') when use lottie
93        Button('load animation')
94          .onClick(() => {
95          if (this.animateItem != null) {
96            this.animateItem.destroy()
97            this.animateItem = null
98          }
99          this.animateItem = lottie.loadAnimation({
100            container: this.controller,
101            renderer: 'canvas',
102            loop: true,
103            autoplay: true,
104            name: this.animateName,
105            path: this.animatePath,
106            initialSegment: [10, 50],
107          })
108        })
109
110        Button('destroy animation')
111          .onClick(() => {
112            lottie.destroy(this.animateName)
113            this.animateItem = null
114          })
115      }
116      .width('100%')
117      .height('100%')
118    }
119  }
120  ```
121
122  ![zh-cn_image_0000001194352468](figures/zh-cn_image_0000001194352468.gif)
123
124
125## lottie.play
126
127play(name: string): void
128
129播放指定动画。
130
131**参数:**
132
133| 参数   | 类型     | 必填   | 描述                                       |
134| ---- | ------ | ---- | ---------------------------------------- |
135| name | string | 是    | 被指定的动画名, 同loadAnimation接口参数name,缺省时播放所有动画。 |
136
137**示例:**
138
139  ```ts
140  lottie.play(this.animateName)
141  ```
142
143
144## lottie.pause
145
146pause(name: string): void
147
148暂停指定动画,下次调用lottie.play()从当前帧开始。
149
150**参数:**
151
152| 参数   | 类型     | 必填   | 描述                                       |
153| ---- | ------ | ---- | ---------------------------------------- |
154| name | string | 是    | 被指定的动画名,同loadAnimation接口入参name,缺省时暂停所有动画。 |
155
156**示例:**
157
158  ```ts
159  lottie.pause(this.animateName)
160  ```
161
162
163## lottie.togglePause
164
165togglePause(name: string): void
166
167暂停或播放指定动画,等效于lottie.play()与lottie.pause()切换调用。
168
169**参数:**
170
171| 参数   | 类型     | 必填   | 描述                                       |
172| ---- | ------ | ---- | ---------------------------------------- |
173| name | string | 是    | 被指定的动画名,同loadAnimation接口参数name,缺省时停止所有动画。 |
174
175**示例:**
176
177  ```ts
178  lottie.togglePause(this.animateName)
179  ```
180
181
182## lottie.stop
183
184stop(name: string): void
185
186停止指定动画,下次调用lottie.play()从第一帧开始。
187
188**参数:**
189
190| 参数   | 类型     | 必填   | 描述                                       |
191| ---- | ------ | ---- | ---------------------------------------- |
192| name | string | 是    | 被指定的动画名,同loadAnimation接口参数name,缺省时停止所有动画。 |
193
194**示例:**
195
196  ```ts
197  lottie.stop(this.animateName)
198  ```
199
200
201## lottie.setSpeed
202
203setSpeed(speed: number, name: string): void
204
205设置指定动画播放速度。
206
207**参数:**
208
209| 参数    | 类型     | 必填   | 描述                                       |
210| ----- | ------ | ---- | ---------------------------------------- |
211| speed | number | 是    | 值为浮点类型, speed>0正向播放, speed<0反向播放, speed=0暂停播放, speed=1.0/-1.0正常速度播放。 |
212| name  | string | 是    | 被指定的动画,同loadAnimation接口参数name,缺省时停止所有动画。 |
213
214**示例:**
215
216  ```ts
217  lottie.setSpeed(5, this.animateName)
218  ```
219
220
221## lottie.setDirection
222
223setDirection(direction: AnimationDirection, name: string): void
224
225设置指定动画播放顺序。
226
227**参数:**
228
229| 参数        | 类型                 | 必填   | 描述                                       |
230| --------- | ------------------ | ---- | ---------------------------------------- |
231| direction | AnimationDirection | 是    | 1为正向,-1为反向;&nbsp;当设置为反向时,从当前播放进度开始回播直到首帧,loop值为true时可无限倒放;speed&lt;0叠加时也是倒放。<br/>AnimationDirection:1&nbsp;\|&nbsp;-1 |
232| name      | string             | 是    | 被指定的动画名,同loadAnimation接口参数name,缺省时设置所有动画方向。 |
233
234**示例:**
235
236  ```ts
237  lottie.setDirection(-1, this.animateName)
238  ```
239
240
241## AnimationItem
242
243loadAnimation接口的返回对象,具有属性与接口。属性描述如下:
244
245| 参数名称              | 参数类型                                     | 参数描述                                     |
246| ----------------- | ---------------------------------------- | ---------------------------------------- |
247| name              | string                                   | 动画名称。                                    |
248| isLoaded          | boolean                                  | 动画是否已加载。                                 |
249| currentFrame      | number                                   | 当前播放的帧号,&nbsp;默认精度为&gt;=0.0的浮点数,&nbsp;调用setSubframe(false)后精度为去小数点后的正整数。 |
250| currentRawFrame   | number                                   | 当前播放帧数,&nbsp;精度为&gt;=0.0的浮点数。            |
251| firstFrame        | number                                   | 当前播放片段的第一帧帧号。                            |
252| totalFrames       | number                                   | 当前播放片段的总帧数。                              |
253| frameRate         | number                                   | 帧率&nbsp;(frame/s)。                       |
254| frameMult         | number                                   | 帧率&nbsp;(frame/ms)。                      |
255| playSpeed         | number                                   | 值为浮点类型,&nbsp;speed&gt;0正向播放,&nbsp;speed&lt;0反向播放,&nbsp;speed=0暂停播放,&nbsp;speed=1.0&nbsp;\|&nbsp;-1.0正常速度播放。 |
256| playDirection     | number                                   | 播放方向,&nbsp;1为正放,&nbsp;-1为倒放。             |
257| playCount         | number                                   | 动画完成播放的次数。                               |
258| isPaused          | boolean                                  | 当前动画是否已暂停,&nbsp;值为true动画已暂停。             |
259| autoplay          | boolean                                  | 加载动画后是否自动播放,&nbsp;若值为false需要再调用play()接口开始播放。 |
260| loop              | boolean&nbsp;\|&nbsp;number              | 类型为boolean时是否循环播放,&nbsp;类型为number时播放次数。  |
261| renderer          | any                                      | 动画渲染对象,&nbsp;根据渲染类型而定。                   |
262| animationID       | string                                   | 动画ID。                                    |
263| timeCompleted     | number                                   | 当前动画片段完成单次播放的帧数,&nbsp;受AnimationSegment设置影响,&nbsp;与totalFrames属性值相同。 |
264| segmentPos        | number                                   | 当前动画片段序号,&nbsp;值为&gt;=0的正整数。             |
265| isSubframeEnabled | boolean                                  | 关联了currentFrame的精度是否为浮点数。                |
266| segments          | AnimationSegment&nbsp;\|&nbsp;AnimationSegment[] | 当前动画的播放片段。                               |
267
268
269## AnimationItem.play
270
271play(name?: string): void
272
273播放动画。
274
275**参数:**
276
277| 参数   | 类型     | 必填   | 描述              |
278| ---- | ------ | ---- | --------------- |
279| name | string | 否    | 被指定的动画名,缺省默认为空。 |
280
281**示例:**
282
283  ```ts
284  this.animateItem.play()
285  ```
286
287
288## AnimationItem.destroy
289
290destroy(name?: string): void
291
292销毁动画。
293
294**参数:**
295
296| 参数   | 类型     | 必填   | 描述              |
297| ---- | ------ | ---- | --------------- |
298| name | string | 否    | 被指定的动画名,缺省默认为空。 |
299
300**示例:**
301
302  ```ts
303  this.animateItem.destroy()
304  ```
305
306
307## AnimationItem.pause
308
309pause(name?: string): void
310
311暂停动画,下次调用play接口从当前帧开始播放。
312
313**参数:**
314
315| 参数   | 类型     | 必填   | 描述              |
316| ---- | ------ | ---- | --------------- |
317| name | string | 否    | 被指定的动画名,缺省默认为空。 |
318
319**示例:**
320
321  ```ts
322  this.animateItem.pause()
323  ```
324
325
326## AnimationItem.togglePause
327
328togglePause(name?: string): void
329
330暂停或播放动画,等效于play接口与pause接口之间轮换调用。
331
332**参数:**
333
334| 参数   | 类型     | 必填   | 描述              |
335| ---- | ------ | ---- | --------------- |
336| name | string | 否    | 被指定的动画名,缺省默认为空。 |
337
338**示例:**
339
340  ```ts
341  this.animateItem.togglePause()
342  ```
343
344
345## AnimationItem.stop
346
347stop(name?: string): void
348
349停止动画,下次调用play接口从第一帧开始播放。
350
351**参数:**
352
353| 参数   | 类型     | 必填   | 描述              |
354| ---- | ------ | ---- | --------------- |
355| name | string | 否    | 被指定的动画名,缺省默认为空。 |
356
357**示例:**
358
359  ```ts
360  this.animateItem.stop()
361  ```
362
363
364## AnimationItem.setSpeed
365
366setSpeed(speed: number): void
367
368设置动画播放速度。
369
370**参数:**
371
372| 参数    | 类型     | 必填   | 描述                                       |
373| ----- | ------ | ---- | ---------------------------------------- |
374| speed | number | 是    | 值为浮点类型,&nbsp;speed&gt;0正向播放,&nbsp;speed&lt;0反向播放,&nbsp;speed=0暂停播放,&nbsp;speed=1.0&nbsp;\|&nbsp;-1.0正常速度播放。 |
375
376**示例:**
377
378  ```ts
379  this.animateItem.setSpeed(5);
380  ```
381
382
383## AnimationItem.setDirection
384
385setDirection(direction: AnimationDirection): void
386
387设置动画播放顺序。
388
389**参数:**
390
391| 参数        | 类型                 | 必填   | 描述                                       |
392| --------- | ------------------ | ---- | ---------------------------------------- |
393| direction | AnimationDirection | 是    | 1为正向,-1为反向;&nbsp;当设置为反向时,从当前播放进度开始回播直到首帧,loop值为true时可无限倒放;speed&lt;0叠加时也是倒放。<br/>AnimationDirection:1&nbsp;\|&nbsp;-1。 |
394
395**示例:**
396
397  ```ts
398  this.animateItem.setDirection(-1)
399  ```
400
401
402## AnimationItem.goToAndStop
403
404goToAndStop(value: number, isFrame?: boolean): void
405
406设置动画停止在指定帧或时间进度。
407
408**参数:**
409
410| 参数      | 类型      | 必填   | 描述                                       |
411| ------- | ------- | ---- | ---------------------------------------- |
412| value   | number  | 是    | 帧号(值大于等于0)或时间进度(ms)。                     |
413| isFrame | boolean | 否    | true:&nbsp;按指定帧控制,false:按指定时间控制,缺省默认false。 |
414| name    | string  | 否    | 被指定的动画名,缺省默认为空。                          |
415
416**示例:**
417
418  ```ts
419  // 按帧号控制
420  this.animateItem.goToAndStop(25, true)
421  // 按时间进度控制
422  this.animateItem.goToAndStop(300, false, this.animateName)
423  ```
424
425
426## AnimationItem.goToAndPlay
427
428goToAndPlay(value: number, isFrame: boolean, name?: string): void
429
430设置动画从指定帧或时间进度开始播放。
431
432**参数:**
433
434| 参数      | 类型      | 必填   | 描述                                       |
435| ------- | ------- | ---- | ---------------------------------------- |
436| value   | number  | 是    | 帧号(值大于等于0)或时间进度(ms)                      |
437| isFrame | boolean | 是    | true:按指定帧控制,&nbsp;false:按指定时间控制,缺省默认false。 |
438| name    | string  | 否    | 被指定的动画名,缺省默认为空。                          |
439
440**示例:**
441
442  ```ts
443  // 按帧号控制
444  this.animateItem.goToAndPlay(25, true)
445  // 按时间进度控制
446  this.animateItem.goToAndPlay(300, false, this.animateName)
447  ```
448
449
450## AnimationItem.playSegments
451
452playSegments(segments: AnimationSegment | AnimationSegment[], forceFlag: boolean): void
453
454设置动画仅播放指定片段。
455
456**参数:**
457
458| 参数        | 类型                                       | 必填   | 描述                                       |
459| --------- | ---------------------------------------- | ---- | ---------------------------------------- |
460| segments  | AnimationSegment&nbsp;=&nbsp;[number,&nbsp;number]&nbsp;\|&nbsp;AnimationSegment[] | 是    | 片段或片段列表;<br/>如果片段列表全部播放完毕后,下轮循环播放仅播放最后一个片段 |
461| forceFlag | boolean                                  | 是    | true:即时生效播放,false:延迟到下轮循环播放再生效           |
462
463**示例:**
464
465  ```ts
466  // 指定播放片段
467  this.animateItem.playSegments([10, 20], false)
468  // 指定播放片段列表
469  this.animateItem.playSegments([[0, 5], [20, 30]], true)
470  ```
471
472
473## AnimationItem.resetSegments
474
475resetSegments(forceFlag: boolean): void
476
477重置动画播放片段,播放全帧。
478
479**参数:**
480
481| 参数        | 类型      | 必填   | 描述                             |
482| --------- | ------- | ---- | ------------------------------ |
483| forceFlag | boolean | 是    | true:即时生效播放,false:延迟到下轮循环播放再生效 |
484
485**示例:**
486
487  ```ts
488  this.animateItem.resetSegments(true)
489  ```
490
491
492## AnimationItem.resize
493
494resize(): void
495
496刷新动画布局。
497
498**示例:**
499
500  ```ts
501  this.animateItem.resize()
502  ```
503
504
505## AnimationItem.setSubframe
506
507setSubframe(useSubFrame: boolean): void
508
509设置属性currentFrame的精度显示浮点数。
510
511**参数:**
512
513| 参数           | 类型      | 必填   | 描述                                       |
514| ------------ | ------- | ---- | ---------------------------------------- |
515| useSubFrames | boolean | 是    | currentFrame属性默认显示浮点数,该接口参数将影响currentFrame属性的精度。<br/>true:属性currentFrame显示浮点。<br/>false:属性currentFrame去浮点数显示整数。 |
516
517**示例:**
518
519  ```ts
520  this.animateItem.setSubframe(false)
521  ```
522
523
524## AnimationItem.getDuration
525
526getDuration(inFrames?: boolean): void
527
528获取动画单次完整播放的时间(与播放速度无关)或帧数, 与Lottie.loadAnimation接口入参initialSegment有关。
529
530**参数:**
531
532| 参数       | 类型      | 必填   | 描述                                       |
533| -------- | ------- | ---- | ---------------------------------------- |
534| inFrames | boolean | 否    | true:获取帧数,&nbsp;false:获取时间(单位ms),缺省默认false。 |
535
536**示例:**
537
538  ```ts
539  this.animateItem.getDuration(true)
540  ```
541
542
543## AnimationItem.addEventListener
544
545addEventListener&lt;T = any&gt;(name: AnimationEventName, callback: AnimationEventCallback&lt;T&gt;): () =&gt; void
546
547添加侦听事件, 事件完成后会触发指定回调函数。返回可删除该侦听事件的函数对象。
548
549**参数:**
550
551| 参数       | 类型                              | 必填   | 描述                                       |
552| -------- | ------------------------------- | ---- | ---------------------------------------- |
553| name     | AnimationEventName              | 是    | 指定动画事件类型,Lottie内置动画事件类型AnimationEventName:<br/>'enterFrame'、'loopComplete'、'complete'、'segmentStart'、'destroy'、'config_ready'、'data_ready'、'DOMLoaded'、'error'、'data_failed'、'loaded_images' |
554| callback | AnimationEventCallback&lt;T&gt; | 是    | 用户自定义回调函数                                |
555
556**示例:**
557
558  ```ts
559  private callbackItem: any = function() {
560      console.log("grunt loopComplete")
561  }
562  let delFunction = this.animateItem.addEventListener('loopComplete', this.animateName)
563
564  // 删除侦听
565  delFunction()
566  ```
567
568
569## AnimationItem.removeEventListener
570
571removeEventListener&lt;T = any&gt;(name: AnimationEventName, callback?: AnimationEventCallback&lt;T&gt;): void
572
573删除侦听事件。
574
575**参数:**
576
577| 参数       | 类型                              | 必填   | 描述                                       |
578| -------- | ------------------------------- | ---- | ---------------------------------------- |
579| name     | AnimationEventName              | 是    | 指定动画事件类型,Lottie内置动画事件类型AnimationEventName:<br/>'enterFrame'、'loopComplete'、'complete'、'segmentStart'、'destroy'、'config_ready'、'data_ready'、'DOMLoaded'、'error'、'data_failed'、'loaded_images' |
580| callback | AnimationEventCallback&lt;T&gt; | 否    | 用户自定义回调函数;缺省为空时,删除此事件的所有回调函数。            |
581
582**示例:**
583
584  ```ts
585  this.animateItem.removeEventListener('loopComplete', this.animateName)
586  ```
587
588
589## AnimationItem.triggerEvent
590
591triggerEvent&lt;T = any&gt;(name: AnimationEventName, args: T): void
592
593直接触发指定事件的所有已设置的回调函数。
594
595**参数:**
596
597| 参数   | 类型                 | 必填   | 描述        |
598| ---- | ------------------ | ---- | --------- |
599| name | AnimationEventName | 是    | 指定动画事件类型  |
600| args | any                | 是    | 用户自定义回调参数 |
601
602**示例:**
603
604  ```ts
605  private triggerCallBack: any = function(item) {
606      console.log("trigger loopComplete, name:" + item.name)
607  }
608
609  this.animateItem.addEventListener('loopComplete', this.triggerCallBack)
610  this.animateItem.triggerEvent('loopComplete', this.animateItem)
611  this.animateItem.removeEventListener('loopComplete', this.triggerCallBack)
612  ```
613