# 组件动画 在组件上创建和运行动画的快捷方式。具体用法请参考[通用方法](../reference/arkui-js/js-components-common-methods.md)。 ## 获取动画对象 通过调用animate方法获得animation对象,animation对象支持动画属性、动画方法和动画事件。 ```html
``` ```css /* xxx.css */ .container { flex-direction: column; justify-content: center; align-items: center; width: 100%; } .box{ width: 200px; height: 200px; background-color: #ff0000; margin-top: 30px; } ``` ```js /* xxx.js */ export default { data: { animation: '', options: {}, frames: {} }, onInit() { this.options = { duration: 1500, }; this.frames = [ { width: 200, height: 200, }, { width: 300, height: 300, } ]; }, Show() { this.animation = this.$element('content').animate(this.frames, this.options); //获取动画对象 this.animation.play(); } } ``` ![zh-cn_image_0000001175235138](figures/zh-cn_image_0000001175235138.gif) > **说明:** > - 使用animate方法时必须传入Keyframes和Options参数。 > - 多次调用animate方法时,采用replace策略,即最后一次调用时传入的参数生效。 ## 设置动画参数 在获取动画对象后,通过设置参数Keyframes设置动画在组件上的样式。 ```html
``` ```css /* xxx.css */ .container { flex-direction: column; justify-content: center; align-items: center; width: 100%; height: 100%; } .box{ width: 200px; height: 200px; background-color: #ff0000; margin-top: 30px; } ``` ```js /* xxx.js */ export default { data: { animation: '', keyframes:{}, options:{} }, onInit() { this.options = { duration: 4000, } this.keyframes = [ { transform: { translate: '-120px -0px', scale: 1, rotate: 0 }, transformOrigin: '100px 100px', offset: 0.0, width: 200, height: 200 }, { transform: { translate: '120px 0px', scale: 1.5, rotate: 90 }, transformOrigin: '100px 100px', offset: 1.0, width: 300, height: 300 } ] }, Show() { this.animation = this.$element('content').animate(this.keyframes, this.options) this.animation.play() } } ``` ![zh-cn_image_0000001174916742](figures/zh-cn_image_0000001174916742.gif) > **说明:** > - translate、scale和rtotate的先后顺序会影响动画效果。 > > - transformOrigin只对scale和rtotate起作用。 在获取动画对象后,通过设置参数Options来设置动画的属性。 ```html
``` ```css /* xxx.css */ .container { flex-direction: column; justify-content: center; align-items: center; width: 100%; } .box{ width: 200px; height: 200px; background-color: #ff0000; margin-top: 30px; } ``` ```js /* xxx.js */ export default { data: { animation: '', options: {}, frames: {} }, onInit() { this.options = { duration: 1500, easing: 'ease-in', delay: 5, iterations: 2, direction: 'normal', }; this.frames = [ { transform: { translate: '-150px -0px' } }, { transform: { translate: '150px 0px' } } ]; }, Show() { this.animation = this.$element('content').animate(this.frames, this.options); this.animation.play(); } } ``` ![zh-cn_image_0000001220396499](figures/zh-cn_image_0000001220396499.gif) > **说明:** > direction:指定动画的播放模式。 > > normal: 动画正向循环播放。 > > reverse: 动画反向循环播放。 > > alternate:动画交替循环播放,奇数次正向播放,偶数次反向播放。 > > alternate-reverse:动画反向交替循环播放,奇数次反向播放,偶数次正向播放。