1# 显式动画 2 3提供全局animateTo显式动画接口来指定由于闭包代码导致的状态变化插入过渡动效。 4 5> **说明:** 6> 7> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9animateTo(value: AnimateParam, event: () => void): void 10 11从API version 9开始,该接口支持在ArkTS卡片中使用。 12 13| 参数 | 类型 | 是否必填 | 描述 | 14| ---------------- | ------------ | -------------------- | -------------------- | 15| value | [AnimateParam](#animateparam对象说明) | 是 | 设置动画效果相关参数。 | 16| event | () => void | 是 | 指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。 | 17 18## AnimateParam对象说明 19 20| 名称 | 类型 | 描述 | 21| -------- | -------- | -------- | 22| duration | number | 动画持续时间,单位为毫秒。<br/>默认值:1000<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**说明:**<br/>- 在ArkTS卡片上最大动画持续时间为1000毫秒,若超出则固定为1000毫秒。 | 23| tempo | number | 动画的播放速度,值越大动画播放越快,值越小播放越慢,为0时无动画效果。<br/>默认值:1.0 | 24| curve | [Curve](ts-appendix-enums.md#curve) \| [ICurve](../apis/js-apis-curve.md#icurve) \| string | 动画曲线。<br/>默认值:Curve.Linear<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 | 25| delay | number | 单位为ms(毫秒),默认不延时播放。<br/>默认值:0 | 26| iterations | number | 默认播放一次,设置为-1时表示无限次播放。<br/>默认值:1 | 27| playMode | [PlayMode](ts-appendix-enums.md#playmode) | 设置动画播放模式,默认播放完成后重头开始播放。<br/>默认值:PlayMode.Normal<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 | 28| onFinish | () => void | 动效播放完成回调。<br/>从API version 9开始,该接口支持在ArkTS卡片中使用。 | 29 30 31## 示例 32 33```ts 34// xxx.ets 35@Entry 36@Component 37struct AnimateToExample { 38 @State widthSize: number = 250 39 @State heightSize: number = 100 40 @State rotateAngle: number = 0 41 private flag: boolean = true 42 43 build() { 44 Column() { 45 Button('change size') 46 .width(this.widthSize) 47 .height(this.heightSize) 48 .margin(30) 49 .onClick(() => { 50 if (this.flag) { 51 animateTo({ 52 duration: 2000, 53 curve: Curve.EaseOut, 54 iterations: 3, 55 playMode: PlayMode.Normal, 56 onFinish: () => { 57 console.info('play end') 58 } 59 }, () => { 60 this.widthSize = 150 61 this.heightSize = 60 62 }) 63 } else { 64 animateTo({}, () => { 65 this.widthSize = 250 66 this.heightSize = 100 67 }) 68 } 69 this.flag = !this.flag 70 }) 71 Button('change rotate angle') 72 .margin(50) 73 .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle }) 74 .onClick(() => { 75 animateTo({ 76 duration: 1200, 77 curve: Curve.Friction, 78 delay: 500, 79 iterations: -1, // 设置-1表示动画无限循环 80 playMode: PlayMode.Alternate, 81 onFinish: () => { 82 console.info('play end') 83 } 84 }, () => { 85 this.rotateAngle = 90 86 }) 87 }) 88 }.width('100%').margin({ top: 5 }) 89 } 90} 91``` 92 93![animation1](figures/animation1.gif) 94