动画

2024-01-23 13:09 更新

本模块提供组件动画效果,包括定义动画、启动动画和以相反的顺序播放动画等。

说明

本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

本模块从API version 9开始支持在ArkTS中使用。

该模块不支持在UIAbility的文件声明处使用,即不能在UIAbility的生命周期中调用,需要在创建组件实例后使用。

导入模块

  1. import animator from '@ohos.animator';

create9+

create(options: AnimatorOptions): AnimatorResult

定义Animator类。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

options

AnimatorOptions

定义动画选项。

返回值:

类型

说明

AnimatorResult

Animator结果接口。

示例:

  1. import animator, { AnimatorOptions } from '@ohos.animator';
  2. let options: AnimatorOptions = { // xxx.js文件中不需要强调显式类型AnimatorOptions
  3. duration: 1500,
  4. easing: "friction",
  5. delay: 0,
  6. fill: "forwards",
  7. direction: "normal",
  8. iterations: 3,
  9. begin: 200.0,
  10. end: 400.0
  11. };
  12. animator.create(options);

AnimatorResult

定义Animator结果接口。

reset9+

reset(options: AnimatorOptions): void

更新当前动画器。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

options

AnimatorOptions

定义动画选项。

错误码:

以下错误码的详细介绍请参见ohos.animator(动画)错误码。

错误码ID

错误信息

100001

if no page is found for pageId or fail to get object property list.

示例:

  1. let options: AnimatorOptions = { // xxx.js文件中不需要强调显式类型AnimatorOptions
  2. duration: 1500,
  3. easing: "friction",
  4. delay: 0,
  5. fill: "forwards",
  6. direction: "normal",
  7. iterations: 3,
  8. begin: 200.0,
  9. end: 400.0
  10. };
  11. let optionsNew: AnimatorOptions = {
  12. duration: 1500,
  13. easing: "friction",
  14. delay: 0,
  15. fill: "forwards",
  16. direction: "normal",
  17. iterations: 5,
  18. begin: 200.0,
  19. end: 400.0
  20. };
  21. try {
  22. let animatorResult:AnimatorResult|undefined = animator.create(options)
  23. animatorResult.reset(optionsNew);
  24. } catch(error) {
  25. console.error(`Animator reset failed, error code: ${error.code}, message: ${error.message}.`);
  26. }

play

play(): void

启动动画。动画会保留上一次的播放状态,比如播放状态设置reverse后,再次播放会保留reverse的播放状态。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. animator.play();

finish

finish(): void

结束动画。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. animator.finish();

pause

pause(): void

暂停动画。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. animator.pause();

cancel

cancel(): void

删除动画。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. animator.cancel();

reverse

reverse(): void

以相反的顺序播放动画。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. animator.reverse();

onframe

onframe: (progress: number) => void

接收到帧时回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

progress

number

动画的当前进度。

示例:

  1. let animatorResult = animator.create(options)
  2. animatorResult.onframe = function(value) {
  3. console.info("onframe callback")
  4. }

onfinish

onfinish: () => void

动画完成时回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. let animatorResult = animator.create(options)
  2. animatorResult.onfinish = function() {
  3. console.info("onfinish callback")
  4. }

oncancel

oncancel: () => void

动画被取消时回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. let animatorResult = animator.create(options)
  2. animatorResult.oncancel = function() {
  3. console.info("oncancel callback")
  4. }

onrepeat

onrepeat: () => void

动画重复时回调。

系统能力: SystemCapability.ArkUI.ArkUI.Full

示例:

  1. let animatorResult = animator.create(options)
  2. animatorResult.onrepeat = function() {
  3. console.info("onrepeat callback")
  4. }

AnimatorOptions

定义动画选项。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称

类型

必填

说明

duration

number

动画播放的时长,单位毫秒。

easing

string

动画插值曲线,仅支持以下可选值:

"linear":动画线性变化。

"ease":动画开始和结束时的速度较慢,cubic-bezier(0.25、0.1、0.25、1.0)。

"ease-in":动画播放速度先慢后快,cubic-bezier(0.42, 0.0, 1.0, 1.0)。

"ease-out":动画播放速度先快后慢,cubic-bezier(0.0, 0.0, 0.58, 1.0)。

"ease-in-out":动画播放速度先加速后减速,cubic-bezier(0.42, 0.0, 0.58, 1.0)。

"fast-out-slow-in":标准曲线,cubic-bezier(0.4,0.0,0.2,1.0)。

"linear-out-slow-in":减速曲线,cubic-bezier(0.0,0.0,0.2,1.0)。

"friction":阻尼曲线,cubic-bezier(0.2, 0.0, 0.2, 1.0)。

"extreme-deceleration":急缓曲线,cubic-bezier(0.0, 0.0, 0.0, 1.0)。

"rhythm":节奏曲线,cubic-bezier(0.7, 0.0, 0.2, 1.0)。

"sharp":锐利曲线,cubic-bezier(0.33, 0.0, 0.67, 1.0)。

"smooth":平滑曲线,cubic-bezier(0.4, 0.0, 0.4, 1.0)。

"cubic-bezier(x1,y1,x2,y2)":三次贝塞尔曲线,x1、x2的值必须处于0-1之间。例如"cubic-bezier(0.42,0.0,0.58,1.0)"。

"steps(number,step-position)":阶梯曲线,number必须设置,为正整数,step-position参数可选,支持设置start或end,默认值为end。例如"steps(3,start)"。

delay

number

动画延时播放时长,单位毫秒,设置为0时,表示不延时。

fill

"none" | "forwards" | "backwards" | "both"

动画执行后是否恢复到初始状态,动画执行后,动画结束时的状态(在最后一个关键帧中定义)将保留。

"none":在动画执行之前和之后都不会应用任何样式到目标上。

"forwards":在动画结束后,目标将保留动画结束时的状态(在最后一个关键帧中定义)。

"backwards":动画将在animation-delay期间应用第一个关键帧中定义的值。当animation-direction为"normal"或"alternate"时应用from关键帧中的值,当animation-direction为"reverse"或"alternate-reverse"时应用to关键帧中的值。

"both":动画将遵循forwards和backwards的规则,从而在两个方向上扩展动画属性。

direction

"normal" | "reverse" | "alternate" | "alternate-reverse"

动画播放模式。

"normal": 动画正向循环播放。

"reverse": 动画反向循环播放。

"alternate":动画交替循环播放,奇数次正向播放,偶数次反向播放。

"alternate-reverse":动画反向交替循环播放,奇数次反向播放,偶数次正向播放。

iterations

number

动画播放次数。设置为0时不播放,设置为-1时无限次播放。

说明: 设置为除-1外其他负数视为无效取值,无效取值动画默认播放1次。

begin

number

动画插值起点。

end

number

动画插值终点。

完整示例

基于JS扩展的类Web开发范式

  1. <!-- hml -->
  2. <div class="container">
  3. <div class="Animation" style="height: {{divHeight}}px; width: {{divWidth}}px; background-color: red;" onclick="Show">
  4. </div>
  5. </div>
  1. export default {
  2. data: {
  3. divWidth: 200,
  4. divHeight: 200,
  5. animator: null
  6. },
  7. onInit() {
  8. let options = {
  9. duration: 1500,
  10. easing: "friction",
  11. delay: 0,
  12. fill: "forwards",
  13. direction: "normal",
  14. iterations: 2,
  15. begin: 200.0,
  16. end: 400.0
  17. };
  18. this.animator = animator.create(options);
  19. },
  20. Show() {
  21. let options1 = {
  22. duration: 1500,
  23. easing: "friction",
  24. delay: 0,
  25. fill: "forwards",
  26. direction: "normal",
  27. iterations: 2,
  28. begin: 0,
  29. end: 400.0
  30. };
  31. try {
  32. this.animator.reset(options1);
  33. } catch(error) {
  34. console.error(`Animator reset failed, error code: ${error.code}, message: ${error.message}.`);
  35. }
  36. let _this = this;
  37. this.animator.onframe = function(value) {
  38. _this.divWidth = value;
  39. _this.divHeight = value;
  40. };
  41. this.animator.play();
  42. }
  43. }

基于TS扩展的声明式开发范式

  1. import animator from '@ohos.animator';
  2. @Entry
  3. @Component
  4. struct AnimatorTest {
  5. private TAG: string = '[AnimatorTest]'
  6. private backAnimator: any = undefined
  7. private flag: boolean = false
  8. @State wid: number = 100
  9. @State hei: number = 100
  10. create() {
  11. let _this = this
  12. this.backAnimator = animator.create({
  13. duration: 2000,
  14. easing: "ease",
  15. delay: 0,
  16. fill: "forwards",
  17. direction: "normal",
  18. iterations: 1,
  19. begin: 100,
  20. end: 200
  21. })
  22. this.backAnimator.onfinish = function () {
  23. _this.flag = true
  24. console.info(_this.TAG, 'backAnimator onfinish')
  25. }
  26. this.backAnimator.onrepeat = function () {
  27. console.info(_this.TAG, 'backAnimator repeat')
  28. }
  29. this.backAnimator.oncancel = function () {
  30. console.info(_this.TAG, 'backAnimator cancel')
  31. }
  32. this.backAnimator.onframe = function (value) {
  33. _this.wid = value
  34. _this.hei = value
  35. }
  36. }
  37. aboutToDisappear() {
  38. // 由于backAnimator在onframe中引用了this, this中保存了backAnimator,
  39. // 在自定义组件消失时应该将保存在组件中的backAnimator置空,避免内存泄漏
  40. this.backAnimator = undefined;
  41. }
  42. build() {
  43. Column() {
  44. Column() {
  45. Column()
  46. .width(this.wid)
  47. .height(this.hei)
  48. .backgroundColor(Color.Red)
  49. }
  50. .width('100%')
  51. .height(300)
  52. Column() {
  53. Row() {
  54. Button('create')
  55. .fontSize(30)
  56. .fontColor(Color.Black)
  57. .onClick(() => {
  58. this.create()
  59. })
  60. }
  61. .padding(10)
  62. Row() {
  63. Button('play')
  64. .fontSize(30)
  65. .fontColor(Color.Black)
  66. .onClick(() => {
  67. this.flag = false
  68. this.backAnimator.play()
  69. })
  70. }
  71. .padding(10)
  72. Row() {
  73. Button('pause')
  74. .fontSize(30)
  75. .fontColor(Color.Black)
  76. .onClick(() => {
  77. this.backAnimator.pause()
  78. })
  79. }
  80. .padding(10)
  81. Row() {
  82. Button('finish')
  83. .fontSize(30)
  84. .fontColor(Color.Black)
  85. .onClick(() => {
  86. this.flag = true
  87. this.backAnimator.finish()
  88. })
  89. }
  90. .padding(10)
  91. Row() {
  92. Button('reverse')
  93. .fontSize(30)
  94. .fontColor(Color.Black)
  95. .onClick(() => {
  96. this.flag = false
  97. this.backAnimator.reverse()
  98. })
  99. }
  100. .padding(10)
  101. Row() {
  102. Button('cancel')
  103. .fontSize(30)
  104. .fontColor(Color.Black)
  105. .onClick(() => {
  106. this.backAnimator.cancel()
  107. })
  108. }
  109. .padding(10)
  110. Row() {
  111. Button('reset')
  112. .fontSize(30)
  113. .fontColor(Color.Black)
  114. .onClick(() => {
  115. if (this.flag) {
  116. this.flag = false
  117. if(this.backAnimator){
  118. this.backAnimator.reset({
  119. duration: 3000,
  120. easing: "ease-in",
  121. delay: 0,
  122. fill: "forwards",
  123. direction: "alternate",
  124. iterations: 3,
  125. begin: 100,
  126. end: 300
  127. })
  128. }
  129. } else {
  130. console.info(this.TAG, 'Animation not ended')
  131. }
  132. })
  133. }
  134. .padding(10)
  135. }
  136. }
  137. }
  138. }

update(deprecated)

update(options: AnimatorOptions): void

更新当前动画器。

从API version9开始不再维护,建议使用reset9+

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

options

AnimatorOptions

定义动画选项。

示例:

  1. animator.update(options);

createAnimator(deprecated)

createAnimator(options: AnimatorOptions): AnimatorResult

定义Animator类。

从API version9开始不再维护,建议使用create9+

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数:

参数名

类型

必填

说明

options

AnimatorOptions

定义动画选项。

返回值:

类型

说明

AnimatorResult

Animator结果接口。

示例:

  1. let options: AnimatorOptions = { // xxx.js文件中不需要强调显式类型AnimatorOptions
  2. duration: 1500,
  3. easing: "friction",
  4. delay: 0,
  5. fill: "forwards",
  6. direction: "normal",
  7. iterations: 3,
  8. begin: 200.0,
  9. end: 400.0
  10. };
  11. this.animator = animator.createAnimator(options);
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号