1e41f4b71Sopenharmony_ci# @ohos.animator (动画)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci本模块提供组件动画效果,包括定义动画、启动动画和以相反的顺序播放动画等。
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci> **说明:**
6e41f4b71Sopenharmony_ci>
7e41f4b71Sopenharmony_ci> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8e41f4b71Sopenharmony_ci>
9e41f4b71Sopenharmony_ci> 本模块从API version 9开始支持在ArkTS中使用。
10e41f4b71Sopenharmony_ci>
11e41f4b71Sopenharmony_ci> 该模块不支持在[UIAbility](../apis-ability-kit/js-apis-app-ability-uiAbility.md)的文件声明处使用,即不能在UIAbility的生命周期中调用,需要在创建组件实例后使用。
12e41f4b71Sopenharmony_ci>
13e41f4b71Sopenharmony_ci> 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用,参见[UIContext](js-apis-arkui-UIContext.md#uicontext)说明。
14e41f4b71Sopenharmony_ci>
15e41f4b71Sopenharmony_ci> 从API version 10开始,可以通过使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[createAnimator](js-apis-arkui-UIContext.md#createanimator)来明确UI的执行上下文。
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci## 导入模块
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci```ts
20e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorOptions,AnimatorResult } from '@kit.ArkUI';
21e41f4b71Sopenharmony_ci```
22e41f4b71Sopenharmony_ci## create<sup>9+</sup>
23e41f4b71Sopenharmony_ci
24e41f4b71Sopenharmony_cicreate(options: AnimatorOptions): AnimatorResult
25e41f4b71Sopenharmony_ci
26e41f4b71Sopenharmony_ci定义Animator类。
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci**参数:** 
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ci| 参数名     | 类型                                  | 必填   | 说明      |
35e41f4b71Sopenharmony_ci| ------- | ----------------------------------- | ---- | ------- |
36e41f4b71Sopenharmony_ci| options | [AnimatorOptions](#animatoroptions) | 是    | 定义动画选项。 |
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci**返回值:** 
39e41f4b71Sopenharmony_ci
40e41f4b71Sopenharmony_ci| 类型                                | 说明            |
41e41f4b71Sopenharmony_ci| --------------------------------- | ------------- |
42e41f4b71Sopenharmony_ci| [AnimatorResult](#animatorresult) | Animator结果接口。 |
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci**错误码**:
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)。
47e41f4b71Sopenharmony_ci
48e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 |
49e41f4b71Sopenharmony_ci| ------- | -------- |
50e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameters types; 3. Parameter verification failed.   |
51e41f4b71Sopenharmony_ci
52e41f4b71Sopenharmony_ci**示例:** 
53e41f4b71Sopenharmony_ci
54e41f4b71Sopenharmony_ci> **说明:**
55e41f4b71Sopenharmony_ci>
56e41f4b71Sopenharmony_ci> 推荐通过使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[createAnimator](js-apis-arkui-UIContext.md#createanimator)接口明确UI上下文。
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ci  ```ts
59e41f4b71Sopenharmony_ciimport {Animator as animator, AnimatorOptions, AnimatorResult } from '@kit.ArkUI';
60e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit';
61e41f4b71Sopenharmony_cilet options: AnimatorOptions = {
62e41f4b71Sopenharmony_ci   duration: 1500,
63e41f4b71Sopenharmony_ci   easing: "friction",
64e41f4b71Sopenharmony_ci   delay: 0,
65e41f4b71Sopenharmony_ci   fill: "forwards",
66e41f4b71Sopenharmony_ci   direction: "normal",
67e41f4b71Sopenharmony_ci   iterations: 3,
68e41f4b71Sopenharmony_ci   begin: 200.0,
69e41f4b71Sopenharmony_ci   end: 400.0
70e41f4b71Sopenharmony_ci};
71e41f4b71Sopenharmony_cianimator.create(options);// 建议使用 UIContext.creatAnimator()接口
72e41f4b71Sopenharmony_ci  ```
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci## AnimatorResult
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci定义Animator结果接口。
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci### reset<sup>9+</sup>
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_cireset(options: AnimatorOptions): void
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci更新当前动画器。
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
85e41f4b71Sopenharmony_ci
86e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
87e41f4b71Sopenharmony_ci
88e41f4b71Sopenharmony_ci**参数:** 
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci| 参数名     | 类型                                  | 必填   | 说明      |
91e41f4b71Sopenharmony_ci| ------- | ----------------------------------- | ---- | ------- |
92e41f4b71Sopenharmony_ci| options | [AnimatorOptions](#animatoroptions) | 是    | 定义动画选项。 |
93e41f4b71Sopenharmony_ci
94e41f4b71Sopenharmony_ci**错误码:**
95e41f4b71Sopenharmony_ci
96e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[ohos.animator(动画)](errorcode-animator.md)错误码。
97e41f4b71Sopenharmony_ci
98e41f4b71Sopenharmony_ci| 错误码ID   | 错误信息 |
99e41f4b71Sopenharmony_ci| --------- | ------- |
100e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2.Incorrect parameters types; 3. Parameter verification failed.   |
101e41f4b71Sopenharmony_ci| 100001    | The specified page is not found or the object property list is not obtained.|
102e41f4b71Sopenharmony_ci
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ci**示例:**
105e41f4b71Sopenharmony_ci
106e41f4b71Sopenharmony_ci```ts
107e41f4b71Sopenharmony_ciimport {Animator as animator, AnimatorOptions, AnimatorResult } from '@kit.ArkUI';
108e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit';
109e41f4b71Sopenharmony_cilet options: AnimatorOptions = {
110e41f4b71Sopenharmony_ci  duration: 1500,
111e41f4b71Sopenharmony_ci  easing: "friction",
112e41f4b71Sopenharmony_ci  delay: 0,
113e41f4b71Sopenharmony_ci  fill: "forwards",
114e41f4b71Sopenharmony_ci  direction: "normal",
115e41f4b71Sopenharmony_ci  iterations: 3,
116e41f4b71Sopenharmony_ci  begin: 200.0,
117e41f4b71Sopenharmony_ci  end: 400.0
118e41f4b71Sopenharmony_ci};
119e41f4b71Sopenharmony_cilet optionsNew: AnimatorOptions = {
120e41f4b71Sopenharmony_ci  duration: 1500,
121e41f4b71Sopenharmony_ci  easing: "friction",
122e41f4b71Sopenharmony_ci  delay: 0,
123e41f4b71Sopenharmony_ci  fill: "forwards",
124e41f4b71Sopenharmony_ci  direction: "normal",
125e41f4b71Sopenharmony_ci  iterations: 5,
126e41f4b71Sopenharmony_ci  begin: 200.0,
127e41f4b71Sopenharmony_ci  end: 400.0
128e41f4b71Sopenharmony_ci};
129e41f4b71Sopenharmony_citry {
130e41f4b71Sopenharmony_ci  let animatorResult:AnimatorResult|undefined = animator.create(options)
131e41f4b71Sopenharmony_ci  animatorResult.reset(optionsNew);
132e41f4b71Sopenharmony_ci} catch(error) {
133e41f4b71Sopenharmony_ci  let message = (error as BusinessError).message
134e41f4b71Sopenharmony_ci  let code = (error as BusinessError).code
135e41f4b71Sopenharmony_ci  console.error(`Animator reset failed, error code: ${code}, message: ${message}.`);
136e41f4b71Sopenharmony_ci}
137e41f4b71Sopenharmony_ci```
138e41f4b71Sopenharmony_ci
139e41f4b71Sopenharmony_ci### play
140e41f4b71Sopenharmony_ci
141e41f4b71Sopenharmony_ciplay(): void
142e41f4b71Sopenharmony_ci
143e41f4b71Sopenharmony_ci启动动画。动画会保留上一次的播放状态,比如播放状态设置reverse后,再次播放会保留reverse的播放状态。
144e41f4b71Sopenharmony_ci
145e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
146e41f4b71Sopenharmony_ci
147e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
148e41f4b71Sopenharmony_ci
149e41f4b71Sopenharmony_ci**示例:**
150e41f4b71Sopenharmony_ci
151e41f4b71Sopenharmony_ci```ts
152e41f4b71Sopenharmony_cianimator.play();
153e41f4b71Sopenharmony_ci```
154e41f4b71Sopenharmony_ci
155e41f4b71Sopenharmony_ci### finish
156e41f4b71Sopenharmony_ci
157e41f4b71Sopenharmony_cifinish(): void
158e41f4b71Sopenharmony_ci
159e41f4b71Sopenharmony_ci结束动画。
160e41f4b71Sopenharmony_ci
161e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
162e41f4b71Sopenharmony_ci
163e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
164e41f4b71Sopenharmony_ci
165e41f4b71Sopenharmony_ci**示例:**
166e41f4b71Sopenharmony_ci
167e41f4b71Sopenharmony_ci```ts
168e41f4b71Sopenharmony_cianimator.finish();
169e41f4b71Sopenharmony_ci```
170e41f4b71Sopenharmony_ci
171e41f4b71Sopenharmony_ci### pause
172e41f4b71Sopenharmony_ci
173e41f4b71Sopenharmony_cipause(): void
174e41f4b71Sopenharmony_ci
175e41f4b71Sopenharmony_ci暂停动画。
176e41f4b71Sopenharmony_ci
177e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
178e41f4b71Sopenharmony_ci
179e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
180e41f4b71Sopenharmony_ci
181e41f4b71Sopenharmony_ci**示例:**
182e41f4b71Sopenharmony_ci
183e41f4b71Sopenharmony_ci```ts
184e41f4b71Sopenharmony_cianimator.pause();
185e41f4b71Sopenharmony_ci```
186e41f4b71Sopenharmony_ci
187e41f4b71Sopenharmony_ci### cancel
188e41f4b71Sopenharmony_ci
189e41f4b71Sopenharmony_cicancel(): void
190e41f4b71Sopenharmony_ci
191e41f4b71Sopenharmony_ci取消动画。
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ci**示例:**
198e41f4b71Sopenharmony_ci
199e41f4b71Sopenharmony_ci```ts
200e41f4b71Sopenharmony_cianimator.cancel();
201e41f4b71Sopenharmony_ci```
202e41f4b71Sopenharmony_ci
203e41f4b71Sopenharmony_ci### reverse
204e41f4b71Sopenharmony_ci
205e41f4b71Sopenharmony_cireverse(): void
206e41f4b71Sopenharmony_ci
207e41f4b71Sopenharmony_ci以相反的顺序播放动画。使用interpolating-spring曲线时此接口无效。
208e41f4b71Sopenharmony_ci
209e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
210e41f4b71Sopenharmony_ci
211e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
212e41f4b71Sopenharmony_ci
213e41f4b71Sopenharmony_ci**示例:**
214e41f4b71Sopenharmony_ci
215e41f4b71Sopenharmony_ci```ts
216e41f4b71Sopenharmony_cianimator.reverse();
217e41f4b71Sopenharmony_ci```
218e41f4b71Sopenharmony_ci
219e41f4b71Sopenharmony_ci### onFrame<sup>12+</sup>
220e41f4b71Sopenharmony_ci
221e41f4b71Sopenharmony_cionFrame: (progress: number) => void
222e41f4b71Sopenharmony_ci
223e41f4b71Sopenharmony_ci接收到帧时回调。
224e41f4b71Sopenharmony_ci
225e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
226e41f4b71Sopenharmony_ci
227e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
228e41f4b71Sopenharmony_ci
229e41f4b71Sopenharmony_ci**参数:** 
230e41f4b71Sopenharmony_ci
231e41f4b71Sopenharmony_ci| 参数名      | 类型     | 必填   | 说明       |
232e41f4b71Sopenharmony_ci| -------- | ------ | ---- | -------- |
233e41f4b71Sopenharmony_ci| progress | number | 是    | 动画的当前值。 |
234e41f4b71Sopenharmony_ci
235e41f4b71Sopenharmony_ci**示例:**
236e41f4b71Sopenharmony_ci
237e41f4b71Sopenharmony_ci```ts
238e41f4b71Sopenharmony_ciimport {Animator as animator, AnimatorResult } from '@kit.ArkUI';
239e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
240e41f4b71Sopenharmony_cianimatorResult.onFrame = (value:number)=> {
241e41f4b71Sopenharmony_ci  console.info("onFrame callback")
242e41f4b71Sopenharmony_ci}
243e41f4b71Sopenharmony_ci```
244e41f4b71Sopenharmony_ci
245e41f4b71Sopenharmony_ci### onFinish<sup>12+</sup>
246e41f4b71Sopenharmony_ci
247e41f4b71Sopenharmony_cionFinish: () => void
248e41f4b71Sopenharmony_ci
249e41f4b71Sopenharmony_ci动画完成时回调。
250e41f4b71Sopenharmony_ci
251e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
252e41f4b71Sopenharmony_ci
253e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
254e41f4b71Sopenharmony_ci
255e41f4b71Sopenharmony_ci**示例:**
256e41f4b71Sopenharmony_ci
257e41f4b71Sopenharmony_ci```ts
258e41f4b71Sopenharmony_ciimport {Animator as animator, AnimatorResult } from '@kit.ArkUI';
259e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
260e41f4b71Sopenharmony_cianimatorResult.onFinish = ()=> {
261e41f4b71Sopenharmony_ci  console.info("onFinish callback")
262e41f4b71Sopenharmony_ci}
263e41f4b71Sopenharmony_ci```
264e41f4b71Sopenharmony_ci
265e41f4b71Sopenharmony_ci### onCancel<sup>12+</sup>
266e41f4b71Sopenharmony_ci
267e41f4b71Sopenharmony_cionCancel: () => void
268e41f4b71Sopenharmony_ci
269e41f4b71Sopenharmony_ci动画被取消时回调。
270e41f4b71Sopenharmony_ci
271e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
272e41f4b71Sopenharmony_ci
273e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
274e41f4b71Sopenharmony_ci
275e41f4b71Sopenharmony_ci**示例:**
276e41f4b71Sopenharmony_ci
277e41f4b71Sopenharmony_ci```ts
278e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
279e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
280e41f4b71Sopenharmony_cianimatorResult.onCancel = ()=> {
281e41f4b71Sopenharmony_ci  console.info("onCancel callback")
282e41f4b71Sopenharmony_ci}
283e41f4b71Sopenharmony_ci```
284e41f4b71Sopenharmony_ci
285e41f4b71Sopenharmony_ci### onRepeat<sup>12+</sup>
286e41f4b71Sopenharmony_ci
287e41f4b71Sopenharmony_cionRepeat: () => void
288e41f4b71Sopenharmony_ci
289e41f4b71Sopenharmony_ci动画重复时回调。
290e41f4b71Sopenharmony_ci
291e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
294e41f4b71Sopenharmony_ci
295e41f4b71Sopenharmony_ci**示例:**
296e41f4b71Sopenharmony_ci
297e41f4b71Sopenharmony_ci```ts
298e41f4b71Sopenharmony_ciimport {Animator as animator, AnimatorResult} from '@kit.ArkUI';
299e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
300e41f4b71Sopenharmony_cianimatorResult.onRepeat = ()=> {
301e41f4b71Sopenharmony_ci  console.info("onRepeat callback")
302e41f4b71Sopenharmony_ci}
303e41f4b71Sopenharmony_ci```
304e41f4b71Sopenharmony_ci
305e41f4b71Sopenharmony_ci### onframe<sup>(deprecated)</sup>
306e41f4b71Sopenharmony_ci
307e41f4b71Sopenharmony_ci> **说明:**
308e41f4b71Sopenharmony_ci>
309e41f4b71Sopenharmony_ci> 从API version 12开始废弃,推荐使用[onFrame](#onframe12)。
310e41f4b71Sopenharmony_ci
311e41f4b71Sopenharmony_cionframe: (progress: number) => void
312e41f4b71Sopenharmony_ci
313e41f4b71Sopenharmony_ci接收到帧时回调。
314e41f4b71Sopenharmony_ci
315e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
316e41f4b71Sopenharmony_ci
317e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
318e41f4b71Sopenharmony_ci
319e41f4b71Sopenharmony_ci**参数:** 
320e41f4b71Sopenharmony_ci
321e41f4b71Sopenharmony_ci| 参数名      | 类型     | 必填   | 说明       |
322e41f4b71Sopenharmony_ci| -------- | ------ | ---- | -------- |
323e41f4b71Sopenharmony_ci| progress | number | 是    | 动画的当前进度。 |
324e41f4b71Sopenharmony_ci
325e41f4b71Sopenharmony_ci**示例:**
326e41f4b71Sopenharmony_ci
327e41f4b71Sopenharmony_ci```ts
328e41f4b71Sopenharmony_ciimport  { Animator as animator, AnimatorResult } from '@kit.ArkUI';
329e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
330e41f4b71Sopenharmony_cianimatorResult.onframe = (value)=> {
331e41f4b71Sopenharmony_ci  console.info("onframe callback")
332e41f4b71Sopenharmony_ci}
333e41f4b71Sopenharmony_ci```
334e41f4b71Sopenharmony_ci
335e41f4b71Sopenharmony_ci### onfinish<sup>(deprecated)</sup>
336e41f4b71Sopenharmony_ci
337e41f4b71Sopenharmony_ci> **说明:**
338e41f4b71Sopenharmony_ci>
339e41f4b71Sopenharmony_ci> 从API version 12开始废弃,推荐使用[onFinish](#onfinish12)。
340e41f4b71Sopenharmony_ci
341e41f4b71Sopenharmony_cionfinish: () => void
342e41f4b71Sopenharmony_ci
343e41f4b71Sopenharmony_ci动画完成时回调。
344e41f4b71Sopenharmony_ci
345e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
346e41f4b71Sopenharmony_ci
347e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
348e41f4b71Sopenharmony_ci
349e41f4b71Sopenharmony_ci**示例:**
350e41f4b71Sopenharmony_ci
351e41f4b71Sopenharmony_ci```ts
352e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
353e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
354e41f4b71Sopenharmony_cianimatorResult.onfinish = ()=> {
355e41f4b71Sopenharmony_ci  console.info("onfinish callback")
356e41f4b71Sopenharmony_ci}
357e41f4b71Sopenharmony_ci```
358e41f4b71Sopenharmony_ci
359e41f4b71Sopenharmony_ci### oncancel<sup>(deprecated)</sup>
360e41f4b71Sopenharmony_ci
361e41f4b71Sopenharmony_ci> **说明:**
362e41f4b71Sopenharmony_ci>
363e41f4b71Sopenharmony_ci> 从API version 12开始废弃,推荐使用[onCancel](#oncancel12)。
364e41f4b71Sopenharmony_ci
365e41f4b71Sopenharmony_ci
366e41f4b71Sopenharmony_cioncancel: () => void
367e41f4b71Sopenharmony_ci
368e41f4b71Sopenharmony_ci动画被取消时回调。
369e41f4b71Sopenharmony_ci
370e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
371e41f4b71Sopenharmony_ci
372e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
373e41f4b71Sopenharmony_ci
374e41f4b71Sopenharmony_ci**示例:**
375e41f4b71Sopenharmony_ci
376e41f4b71Sopenharmony_ci```ts
377e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
378e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
379e41f4b71Sopenharmony_cianimatorResult.oncancel = ()=> {
380e41f4b71Sopenharmony_ci  console.info("oncancel callback")
381e41f4b71Sopenharmony_ci}
382e41f4b71Sopenharmony_ci```
383e41f4b71Sopenharmony_ci
384e41f4b71Sopenharmony_ci### onrepeat<sup>(deprecated)</sup>
385e41f4b71Sopenharmony_ci
386e41f4b71Sopenharmony_ci> **说明:**
387e41f4b71Sopenharmony_ci>
388e41f4b71Sopenharmony_ci> 从API version 12开始废弃,推荐使用[onRepeat](#onrepeat12)。
389e41f4b71Sopenharmony_ci
390e41f4b71Sopenharmony_cionrepeat: () => void
391e41f4b71Sopenharmony_ci
392e41f4b71Sopenharmony_ci动画重复时回调。
393e41f4b71Sopenharmony_ci
394e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
395e41f4b71Sopenharmony_ci
396e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
397e41f4b71Sopenharmony_ci
398e41f4b71Sopenharmony_ci**示例:**
399e41f4b71Sopenharmony_ci
400e41f4b71Sopenharmony_ci```ts
401e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
402e41f4b71Sopenharmony_cilet animatorResult:AnimatorResult|undefined = animator.create(options)
403e41f4b71Sopenharmony_cianimatorResult.onrepeat = ()=> {
404e41f4b71Sopenharmony_ci  console.info("onrepeat callback")
405e41f4b71Sopenharmony_ci}
406e41f4b71Sopenharmony_ci```
407e41f4b71Sopenharmony_ci
408e41f4b71Sopenharmony_ci### setExpectedFrameRateRange<sup>12+</sup>
409e41f4b71Sopenharmony_ci
410e41f4b71Sopenharmony_cisetExpectedFrameRateRange(rateRange: ExpectedFrameRateRange): void
411e41f4b71Sopenharmony_ci
412e41f4b71Sopenharmony_ci设置期望的帧率范围。
413e41f4b71Sopenharmony_ci
414e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
415e41f4b71Sopenharmony_ci
416e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
417e41f4b71Sopenharmony_ci
418e41f4b71Sopenharmony_ci**参数:** 
419e41f4b71Sopenharmony_ci
420e41f4b71Sopenharmony_ci| 参数名           | 类型                                       | 必填 | 说明                          |
421e41f4b71Sopenharmony_ci| --------------- | ------------------------------------------ | ---- | -----------------------------|
422e41f4b71Sopenharmony_ci| rateRange       | [ExpectedFrameRateRange](../apis-arkui/arkui-ts/ts-explicit-animation.md#expectedframeraterange11)| 是   | 设置期望的帧率范围。|
423e41f4b71Sopenharmony_ci
424e41f4b71Sopenharmony_ci**示例:**
425e41f4b71Sopenharmony_ci
426e41f4b71Sopenharmony_ci```ts
427e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
428e41f4b71Sopenharmony_cilet animatorResult: AnimatorResult | undefined = animator.create({
429e41f4b71Sopenharmony_ci  duration: 2000,
430e41f4b71Sopenharmony_ci  easing: "ease",
431e41f4b71Sopenharmony_ci  delay: 0,
432e41f4b71Sopenharmony_ci  fill: "forwards",
433e41f4b71Sopenharmony_ci  direction: "normal",
434e41f4b71Sopenharmony_ci  iterations: 1,
435e41f4b71Sopenharmony_ci  begin: 100,
436e41f4b71Sopenharmony_ci  end: 200
437e41f4b71Sopenharmony_ci})
438e41f4b71Sopenharmony_cilet expectedFrameRate: ExpectedFrameRateRange = {
439e41f4b71Sopenharmony_ci  min: 0,
440e41f4b71Sopenharmony_ci  max: 120,
441e41f4b71Sopenharmony_ci  expected: 30
442e41f4b71Sopenharmony_ci}
443e41f4b71Sopenharmony_cianimatorResult.setExpectedFrameRateRange(expectedFrameRate);
444e41f4b71Sopenharmony_ci```
445e41f4b71Sopenharmony_ci
446e41f4b71Sopenharmony_ci## AnimatorOptions
447e41f4b71Sopenharmony_ci
448e41f4b71Sopenharmony_ci定义动画选项。
449e41f4b71Sopenharmony_ci
450e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
451e41f4b71Sopenharmony_ci
452e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full
453e41f4b71Sopenharmony_ci
454e41f4b71Sopenharmony_ci| 名称       | 类型                                                        | 必填 | 说明                                                         |
455e41f4b71Sopenharmony_ci| ---------- | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
456e41f4b71Sopenharmony_ci| duration   | number                                                      | 是   | 动画播放的时长,单位毫秒。<br/>默认值:0。                                   |
457e41f4b71Sopenharmony_ci| easing     | string                                                      | 是   | 动画插值曲线,仅支持以下可选值:<br/>"linear":动画线性变化。<br/>"ease":动画开始和结束时的速度较慢,cubic-bezier(0.25、0.1、0.25、1.0)。<br/>"ease-in":动画播放速度先慢后快,cubic-bezier(0.42, 0.0, 1.0, 1.0)。<br/>"ease-out":动画播放速度先快后慢,cubic-bezier(0.0, 0.0, 0.58, 1.0)。<br/>"ease-in-out":动画播放速度先加速后减速,cubic-bezier(0.42, 0.0, 0.58, 1.0)。<br/>"fast-out-slow-in":标准曲线,cubic-bezier(0.4,0.0,0.2,1.0)。<br/>"linear-out-slow-in":减速曲线,cubic-bezier(0.0,0.0,0.2,1.0)。<br>"fast-out-linear-in":加速曲线,cubic-bezier(0.4, 0.0, 1.0, 1.0)。<br/>"friction":阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。<br/>"extreme-deceleration":急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。<br/>"rhythm":节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。<br/>"sharp":锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。<br/>"smooth":平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。<br/>"cubic-bezier(x1,y1,x2,y2)":三次贝塞尔曲线,x1、x2的值必须处于0-1之间。例如"cubic-bezier(0.42,0.0,0.58,1.0)"。<br/>"steps(number,step-position)":阶梯曲线,number必须设置,为正整数,step-position参数可选,支持设置start或end,默认值为end。例如"steps(3,start)"。<br/>"interpolating-spring(velocity,mass,stiffness,damping)":插值弹簧曲线,从API version 11开始支持且仅在ArkTS中支持使用。velocity、mass、stiffness、damping都是数值类型,且mass、stiffness、damping参数均应该大于0,具体参数含义参考[插值弹簧曲线](./js-apis-curve.md#curvesinterpolatingspring10)。使用interpolating-spring时,duration不生效,由弹簧参数决定;fill、direction、iterations设置无效,fill固定设置为"forwards",direction固定设置为"normal",iterations固定设置为1,且对animator的[reverse](#reverse)函数调用无效。即animator使用interpolating-spring时只能正向播放1次。<br/>默认值:"ease"。 |
458e41f4b71Sopenharmony_ci| delay      | number                                                      | 是   | 动画延时播放时长,单位毫秒,设置为0时,表示不延时。设置为负数时动画提前播放,如果提前播放的时长大于动画总时长,动画直接过渡到终点。<br/>默认值:0。          |
459e41f4b71Sopenharmony_ci| fill       | "none" \| "forwards" \| "backwards" \| "both"               | 是   | 动画执行后是否恢复到初始状态,动画执行后,动画结束时的状态(在最后一个关键帧中定义)将保留。<br/>"none":在动画执行之前和之后都不会应用任何样式到目标上。<br/>"forwards":在动画结束后,目标将保留动画结束时的状态(在最后一个关键帧中定义)。<br/>"backwards":动画将在animation-delay期间应用第一个关键帧中定义的值。当animation-direction为"normal"或"alternate"时应用from关键帧中的值,当animation-direction为"reverse"或"alternate-reverse"时应用to关键帧中的值。<br/>"both":动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。 |
460e41f4b71Sopenharmony_ci| direction  | "normal" \| "reverse" \| "alternate" \| "alternate-reverse" | 是   | 动画播放模式。<br/>"normal": 动画正向循环播放。<br/>"reverse": 动画反向循环播放。<br/>"alternate":动画交替循环播放,奇数次正向播放,偶数次反向播放。<br/>"alternate-reverse":动画反向交替循环播放,奇数次反向播放,偶数次正向播放。<br/>默认值:"normal"。 |
461e41f4b71Sopenharmony_ci| iterations | number                                                      | 是   | 动画播放次数。设置为0时不播放,设置为-1时无限次播放。<br/>**说明:** 设置为除-1外其他负数视为无效取值,无效取值动画默认播放1次。 |
462e41f4b71Sopenharmony_ci| begin      | number                                                      | 是   | 动画插值起点。<br/>默认值:0。                                               |
463e41f4b71Sopenharmony_ci| end        | number                                                      | 是   | 动画插值终点。<br/>默认值:1。                                               |
464e41f4b71Sopenharmony_ci
465e41f4b71Sopenharmony_ci
466e41f4b71Sopenharmony_ci## 完整示例
467e41f4b71Sopenharmony_ci### 基于JS扩展的类Web开发范式
468e41f4b71Sopenharmony_ci
469e41f4b71Sopenharmony_ci```html
470e41f4b71Sopenharmony_ci<!-- hml -->
471e41f4b71Sopenharmony_ci<div class="container">
472e41f4b71Sopenharmony_ci  <div class="Animation" style="height: {{divHeight}}px; width: {{divWidth}}px; background-color: red;" onclick="Show">
473e41f4b71Sopenharmony_ci  </div>
474e41f4b71Sopenharmony_ci</div>
475e41f4b71Sopenharmony_ci```
476e41f4b71Sopenharmony_ci
477e41f4b71Sopenharmony_ci```ts
478e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
479e41f4b71Sopenharmony_ciimport { BusinessError } from '@kit.BasicServicesKit';
480e41f4b71Sopenharmony_cilet DataTmp:Record<string,Animator> = {
481e41f4b71Sopenharmony_ci  'divWidth': 200,
482e41f4b71Sopenharmony_ci  'divHeight': 200,
483e41f4b71Sopenharmony_ci  'animator': animator
484e41f4b71Sopenharmony_ci}
485e41f4b71Sopenharmony_ciclass Tmp{
486e41f4b71Sopenharmony_ci  data:animator = DataTmp
487e41f4b71Sopenharmony_ci  onInit:Function = ()=>{}
488e41f4b71Sopenharmony_ci  Show:Function = ()=>{}
489e41f4b71Sopenharmony_ci}
490e41f4b71Sopenharmony_ciclass DateT{
491e41f4b71Sopenharmony_ci  divWidth:number = 0
492e41f4b71Sopenharmony_ci  divHeight:number = 0
493e41f4b71Sopenharmony_ci  animator:AnimatorResult | null = null
494e41f4b71Sopenharmony_ci}
495e41f4b71Sopenharmony_ci(Fn:(v:Tmp) => void) => {Fn({
496e41f4b71Sopenharmony_ci  data: DataTmp,
497e41f4b71Sopenharmony_ci  onInit() {
498e41f4b71Sopenharmony_ci    let options:AnimatorOptions = {
499e41f4b71Sopenharmony_ci      duration: 1500,
500e41f4b71Sopenharmony_ci      easing: "friction",
501e41f4b71Sopenharmony_ci      delay: 0,
502e41f4b71Sopenharmony_ci      fill: "forwards",
503e41f4b71Sopenharmony_ci      direction: "normal",
504e41f4b71Sopenharmony_ci      iterations: 2,
505e41f4b71Sopenharmony_ci      begin: 200.0,
506e41f4b71Sopenharmony_ci      end: 400.0
507e41f4b71Sopenharmony_ci    };
508e41f4b71Sopenharmony_ci    let DataTmp:DateT = {
509e41f4b71Sopenharmony_ci      divWidth: 200,
510e41f4b71Sopenharmony_ci      divHeight: 200,
511e41f4b71Sopenharmony_ci      animator: null
512e41f4b71Sopenharmony_ci    }
513e41f4b71Sopenharmony_ci    DataTmp.animator = animator.create(options);
514e41f4b71Sopenharmony_ci  },
515e41f4b71Sopenharmony_ci  Show() {
516e41f4b71Sopenharmony_ci    let options1:AnimatorOptions = {
517e41f4b71Sopenharmony_ci      duration: 1500,
518e41f4b71Sopenharmony_ci      easing: "friction",
519e41f4b71Sopenharmony_ci      delay: 0,
520e41f4b71Sopenharmony_ci      fill: "forwards",
521e41f4b71Sopenharmony_ci      direction: "normal",
522e41f4b71Sopenharmony_ci      iterations: 2,
523e41f4b71Sopenharmony_ci      begin: 0,
524e41f4b71Sopenharmony_ci      end: 400.0,
525e41f4b71Sopenharmony_ci    };
526e41f4b71Sopenharmony_ci    let DataTmp:DateT = {
527e41f4b71Sopenharmony_ci      divWidth: 200,
528e41f4b71Sopenharmony_ci      divHeight: 200,
529e41f4b71Sopenharmony_ci      animator: null
530e41f4b71Sopenharmony_ci    }
531e41f4b71Sopenharmony_ci    try {
532e41f4b71Sopenharmony_ci      DataTmp.animator = animator.create(options1);
533e41f4b71Sopenharmony_ci      DataTmp.animator.reset(options1);
534e41f4b71Sopenharmony_ci    } catch(error) {
535e41f4b71Sopenharmony_ci      let message = (error as BusinessError).message
536e41f4b71Sopenharmony_ci      let code = (error as BusinessError).code
537e41f4b71Sopenharmony_ci      console.error(`Animator reset failed, error code: ${code}, message: ${message}.`);
538e41f4b71Sopenharmony_ci    }
539e41f4b71Sopenharmony_ci    let _this = DataTmp;
540e41f4b71Sopenharmony_ci    if(DataTmp.animator){
541e41f4b71Sopenharmony_ci      DataTmp.animator.onFrame = (value:number)=> {
542e41f4b71Sopenharmony_ci        _this.divWidth = value;
543e41f4b71Sopenharmony_ci        _this.divHeight = value;
544e41f4b71Sopenharmony_ci      };
545e41f4b71Sopenharmony_ci      DataTmp.animator.play();
546e41f4b71Sopenharmony_ci    }
547e41f4b71Sopenharmony_ci  }
548e41f4b71Sopenharmony_ci})}
549e41f4b71Sopenharmony_ci```
550e41f4b71Sopenharmony_ci
551e41f4b71Sopenharmony_ci  ![zh-cn_image_00007](figures/zh-cn_image_00007.gif)
552e41f4b71Sopenharmony_ci
553e41f4b71Sopenharmony_ci### 基于ArkTS扩展的声明式开发范式
554e41f4b71Sopenharmony_ci
555e41f4b71Sopenharmony_ci> **说明:**
556e41f4b71Sopenharmony_ci>
557e41f4b71Sopenharmony_ci> 推荐通过使用[UIContext](js-apis-arkui-UIContext.md#uicontext)中的[createAnimator](js-apis-arkui-UIContext.md#createanimator)接口明确UI上下文。
558e41f4b71Sopenharmony_ci
559e41f4b71Sopenharmony_ci```ts
560e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
561e41f4b71Sopenharmony_ci
562e41f4b71Sopenharmony_ci
563e41f4b71Sopenharmony_ci@Entry
564e41f4b71Sopenharmony_ci@Component
565e41f4b71Sopenharmony_cistruct AnimatorTest {
566e41f4b71Sopenharmony_ci  private TAG: string = '[AnimatorTest]'
567e41f4b71Sopenharmony_ci  private backAnimator: AnimatorResult | undefined = undefined
568e41f4b71Sopenharmony_ci  private flag: boolean = false
569e41f4b71Sopenharmony_ci  @State wid: number = 100
570e41f4b71Sopenharmony_ci  @State hei: number = 100
571e41f4b71Sopenharmony_ci
572e41f4b71Sopenharmony_ci  create() {
573e41f4b71Sopenharmony_ci    let _this = this
574e41f4b71Sopenharmony_ci    this.backAnimator = animator.create({// 建议使用 this.getUIContext.creatAnimator()接口
575e41f4b71Sopenharmony_ci      duration: 2000,
576e41f4b71Sopenharmony_ci      easing: "ease",
577e41f4b71Sopenharmony_ci      delay: 0,
578e41f4b71Sopenharmony_ci      fill: "forwards",
579e41f4b71Sopenharmony_ci      direction: "normal",
580e41f4b71Sopenharmony_ci      iterations: 1,
581e41f4b71Sopenharmony_ci      begin: 100,
582e41f4b71Sopenharmony_ci      end: 200
583e41f4b71Sopenharmony_ci    })
584e41f4b71Sopenharmony_ci    this.backAnimator.onFinish = ()=> {
585e41f4b71Sopenharmony_ci      _this.flag = true
586e41f4b71Sopenharmony_ci      console.info(_this.TAG, 'backAnimator onfinish')
587e41f4b71Sopenharmony_ci    }
588e41f4b71Sopenharmony_ci    this.backAnimator.onRepeat = ()=> {
589e41f4b71Sopenharmony_ci      console.info(_this.TAG, 'backAnimator repeat')
590e41f4b71Sopenharmony_ci    }
591e41f4b71Sopenharmony_ci    this.backAnimator.onCancel = ()=> {
592e41f4b71Sopenharmony_ci      console.info(_this.TAG, 'backAnimator cancel')
593e41f4b71Sopenharmony_ci    }
594e41f4b71Sopenharmony_ci    this.backAnimator.onFrame = (value:number)=> {
595e41f4b71Sopenharmony_ci      _this.wid = value
596e41f4b71Sopenharmony_ci      _this.hei = value
597e41f4b71Sopenharmony_ci    }
598e41f4b71Sopenharmony_ci  }
599e41f4b71Sopenharmony_ci
600e41f4b71Sopenharmony_ci  aboutToDisappear() {
601e41f4b71Sopenharmony_ci    // 由于backAnimator在onframe中引用了this, this中保存了backAnimator,
602e41f4b71Sopenharmony_ci    // 在自定义组件消失时应该将保存在组件中的backAnimator置空,避免内存泄漏
603e41f4b71Sopenharmony_ci    this.backAnimator = undefined;
604e41f4b71Sopenharmony_ci  }
605e41f4b71Sopenharmony_ci
606e41f4b71Sopenharmony_ci  build() {
607e41f4b71Sopenharmony_ci    Column() {
608e41f4b71Sopenharmony_ci      Column() {
609e41f4b71Sopenharmony_ci        Column()
610e41f4b71Sopenharmony_ci          .width(this.wid)
611e41f4b71Sopenharmony_ci          .height(this.hei)
612e41f4b71Sopenharmony_ci          .backgroundColor(Color.Red)
613e41f4b71Sopenharmony_ci      }
614e41f4b71Sopenharmony_ci      .width('100%')
615e41f4b71Sopenharmony_ci      .height(300)
616e41f4b71Sopenharmony_ci
617e41f4b71Sopenharmony_ci      Column() {
618e41f4b71Sopenharmony_ci        Row() {
619e41f4b71Sopenharmony_ci          Button('create')
620e41f4b71Sopenharmony_ci            .fontSize(30)
621e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
622e41f4b71Sopenharmony_ci            .onClick(() => {
623e41f4b71Sopenharmony_ci              this.create()
624e41f4b71Sopenharmony_ci            })
625e41f4b71Sopenharmony_ci        }
626e41f4b71Sopenharmony_ci        .padding(10)
627e41f4b71Sopenharmony_ci
628e41f4b71Sopenharmony_ci        Row() {
629e41f4b71Sopenharmony_ci          Button('play')
630e41f4b71Sopenharmony_ci            .fontSize(30)
631e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
632e41f4b71Sopenharmony_ci            .onClick(() => {
633e41f4b71Sopenharmony_ci              this.flag = false
634e41f4b71Sopenharmony_ci              if(this.backAnimator){
635e41f4b71Sopenharmony_ci                this.backAnimator.play()
636e41f4b71Sopenharmony_ci              }
637e41f4b71Sopenharmony_ci            })
638e41f4b71Sopenharmony_ci        }
639e41f4b71Sopenharmony_ci        .padding(10)
640e41f4b71Sopenharmony_ci
641e41f4b71Sopenharmony_ci        Row() {
642e41f4b71Sopenharmony_ci          Button('pause')
643e41f4b71Sopenharmony_ci            .fontSize(30)
644e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
645e41f4b71Sopenharmony_ci            .onClick(() => {
646e41f4b71Sopenharmony_ci              if(this.backAnimator){
647e41f4b71Sopenharmony_ci                this.backAnimator.pause()
648e41f4b71Sopenharmony_ci              }
649e41f4b71Sopenharmony_ci            })
650e41f4b71Sopenharmony_ci        }
651e41f4b71Sopenharmony_ci        .padding(10)
652e41f4b71Sopenharmony_ci
653e41f4b71Sopenharmony_ci        Row() {
654e41f4b71Sopenharmony_ci          Button('finish')
655e41f4b71Sopenharmony_ci            .fontSize(30)
656e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
657e41f4b71Sopenharmony_ci            .onClick(() => {
658e41f4b71Sopenharmony_ci              this.flag = true
659e41f4b71Sopenharmony_ci              if(this.backAnimator){
660e41f4b71Sopenharmony_ci                this.backAnimator.finish()
661e41f4b71Sopenharmony_ci              }
662e41f4b71Sopenharmony_ci            })
663e41f4b71Sopenharmony_ci        }
664e41f4b71Sopenharmony_ci        .padding(10)
665e41f4b71Sopenharmony_ci
666e41f4b71Sopenharmony_ci        Row() {
667e41f4b71Sopenharmony_ci          Button('reverse')
668e41f4b71Sopenharmony_ci            .fontSize(30)
669e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
670e41f4b71Sopenharmony_ci            .onClick(() => {
671e41f4b71Sopenharmony_ci              this.flag = false
672e41f4b71Sopenharmony_ci              if(this.backAnimator){
673e41f4b71Sopenharmony_ci                this.backAnimator.reverse()
674e41f4b71Sopenharmony_ci              }
675e41f4b71Sopenharmony_ci            })
676e41f4b71Sopenharmony_ci        }
677e41f4b71Sopenharmony_ci        .padding(10)
678e41f4b71Sopenharmony_ci
679e41f4b71Sopenharmony_ci        Row() {
680e41f4b71Sopenharmony_ci          Button('cancel')
681e41f4b71Sopenharmony_ci            .fontSize(30)
682e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
683e41f4b71Sopenharmony_ci            .onClick(() => {
684e41f4b71Sopenharmony_ci              if(this.backAnimator){
685e41f4b71Sopenharmony_ci                this.backAnimator.cancel()
686e41f4b71Sopenharmony_ci              }
687e41f4b71Sopenharmony_ci            })
688e41f4b71Sopenharmony_ci        }
689e41f4b71Sopenharmony_ci        .padding(10)
690e41f4b71Sopenharmony_ci
691e41f4b71Sopenharmony_ci        Row() {
692e41f4b71Sopenharmony_ci          Button('reset')
693e41f4b71Sopenharmony_ci            .fontSize(30)
694e41f4b71Sopenharmony_ci            .fontColor(Color.Black)
695e41f4b71Sopenharmony_ci            .onClick(() => {
696e41f4b71Sopenharmony_ci              if (this.flag) {
697e41f4b71Sopenharmony_ci                this.flag = false
698e41f4b71Sopenharmony_ci                if(this.backAnimator){
699e41f4b71Sopenharmony_ci                  this.backAnimator.reset({
700e41f4b71Sopenharmony_ci                    duration: 3000,
701e41f4b71Sopenharmony_ci                    easing: "ease-in",
702e41f4b71Sopenharmony_ci                    delay: 0,
703e41f4b71Sopenharmony_ci                    fill: "forwards",
704e41f4b71Sopenharmony_ci                    direction: "alternate",
705e41f4b71Sopenharmony_ci                    iterations: 3,
706e41f4b71Sopenharmony_ci                    begin: 100,
707e41f4b71Sopenharmony_ci                    end: 300
708e41f4b71Sopenharmony_ci                  })
709e41f4b71Sopenharmony_ci                }
710e41f4b71Sopenharmony_ci              } else {
711e41f4b71Sopenharmony_ci                console.info(this.TAG, 'Animation not ended')
712e41f4b71Sopenharmony_ci              }
713e41f4b71Sopenharmony_ci            })
714e41f4b71Sopenharmony_ci        }
715e41f4b71Sopenharmony_ci        .padding(10)
716e41f4b71Sopenharmony_ci      }
717e41f4b71Sopenharmony_ci    }
718e41f4b71Sopenharmony_ci  }
719e41f4b71Sopenharmony_ci}
720e41f4b71Sopenharmony_ci```
721e41f4b71Sopenharmony_ci
722e41f4b71Sopenharmony_ci## update<sup>(deprecated)</sup>
723e41f4b71Sopenharmony_ci
724e41f4b71Sopenharmony_ciupdate(options: AnimatorOptions): void
725e41f4b71Sopenharmony_ci
726e41f4b71Sopenharmony_ci更新当前动画器。
727e41f4b71Sopenharmony_ci
728e41f4b71Sopenharmony_ci从API version9开始不再维护,建议使用[reset<sup>9+</sup>](#reset9)
729e41f4b71Sopenharmony_ci
730e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
731e41f4b71Sopenharmony_ci
732e41f4b71Sopenharmony_ci**参数:** 
733e41f4b71Sopenharmony_ci
734e41f4b71Sopenharmony_ci| 参数名     | 类型                                  | 必填   | 说明      |
735e41f4b71Sopenharmony_ci| ------- | ----------------------------------- | ---- | ------- |
736e41f4b71Sopenharmony_ci| options | [AnimatorOptions](#animatoroptions) | 是    | 定义动画选项。 |
737e41f4b71Sopenharmony_ci
738e41f4b71Sopenharmony_ci**示例:**
739e41f4b71Sopenharmony_ci
740e41f4b71Sopenharmony_ci```ts
741e41f4b71Sopenharmony_cianimator.update(options);
742e41f4b71Sopenharmony_ci```
743e41f4b71Sopenharmony_ci
744e41f4b71Sopenharmony_ci## createAnimator<sup>(deprecated)</sup>
745e41f4b71Sopenharmony_ci
746e41f4b71Sopenharmony_cicreateAnimator(options: AnimatorOptions): AnimatorResult
747e41f4b71Sopenharmony_ci
748e41f4b71Sopenharmony_ci定义Animator类。
749e41f4b71Sopenharmony_ci
750e41f4b71Sopenharmony_ci从API version9开始不再维护,建议使用[create<sup>9+</sup>](#create9)
751e41f4b71Sopenharmony_ci
752e41f4b71Sopenharmony_ci**系统能力:**  SystemCapability.ArkUI.ArkUI.Full
753e41f4b71Sopenharmony_ci
754e41f4b71Sopenharmony_ci**参数:** 
755e41f4b71Sopenharmony_ci
756e41f4b71Sopenharmony_ci| 参数名     | 类型                                  | 必填   | 说明      |
757e41f4b71Sopenharmony_ci| ------- | ----------------------------------- | ---- | ------- |
758e41f4b71Sopenharmony_ci| options | [AnimatorOptions](#animatoroptions) | 是    | 定义动画选项。 |
759e41f4b71Sopenharmony_ci
760e41f4b71Sopenharmony_ci**返回值:** 
761e41f4b71Sopenharmony_ci
762e41f4b71Sopenharmony_ci| 类型                                | 说明            |
763e41f4b71Sopenharmony_ci| --------------------------------- | ------------- |
764e41f4b71Sopenharmony_ci| [AnimatorResult](#animatorresult) | Animator结果接口。 |
765e41f4b71Sopenharmony_ci
766e41f4b71Sopenharmony_ci**示例:** 
767e41f4b71Sopenharmony_ci
768e41f4b71Sopenharmony_ci```ts
769e41f4b71Sopenharmony_ciimport { Animator as animator, AnimatorResult } from '@kit.ArkUI';
770e41f4b71Sopenharmony_ci
771e41f4b71Sopenharmony_cilet options: AnimatorOptions = { // xxx.js文件中不需要强调显式类型AnimatorOptions
772e41f4b71Sopenharmony_ci  duration: 1500,
773e41f4b71Sopenharmony_ci  easing: "friction",
774e41f4b71Sopenharmony_ci  delay: 0,
775e41f4b71Sopenharmony_ci  fill: "forwards",
776e41f4b71Sopenharmony_ci  direction: "normal",
777e41f4b71Sopenharmony_ci  iterations: 3,
778e41f4b71Sopenharmony_ci  begin: 200.0,
779e41f4b71Sopenharmony_ci  end: 400.0,
780e41f4b71Sopenharmony_ci};
781e41f4b71Sopenharmony_cithis.animator = animator.createAnimator(options);
782e41f4b71Sopenharmony_ci```