1e41f4b71Sopenharmony_ci# Developing Animations 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ciAnimations are classified into [Static Animation](#static-animation) and [Continuous Animation](#continuous-animation). 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci## Static Animation 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ciThe transform attributes are the core of the static animation. A static animation can transform in the following three ways and only once in each way at a time: 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci- translate: moves a specified component horizontally or vertically. 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci- scale: scales a specified component horizontally or vertically to the required scale. 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci- rotate: rotates a specified component by a specified angle along the horizontal axis, vertical axis, or center point. 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ciFor more information, see [Component Methods](../reference/apis-arkui/arkui-js/js-components-common-methods.md). The following is an example: 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci```html 20e41f4b71Sopenharmony_ci<!-- xxx.hml --> 21e41f4b71Sopenharmony_ci<div class="container"> 22e41f4b71Sopenharmony_ci <text class="translate">hello</text> 23e41f4b71Sopenharmony_ci <text class="rotate">hello</text> 24e41f4b71Sopenharmony_ci <text class="scale">hello</text> 25e41f4b71Sopenharmony_ci</div> 26e41f4b71Sopenharmony_ci``` 27e41f4b71Sopenharmony_ci 28e41f4b71Sopenharmony_ci```css 29e41f4b71Sopenharmony_ci/* xxx.css */ 30e41f4b71Sopenharmony_ci.container { 31e41f4b71Sopenharmony_ci width: 100%; 32e41f4b71Sopenharmony_ci flex-direction: column; 33e41f4b71Sopenharmony_ci align-items: center; 34e41f4b71Sopenharmony_ci} 35e41f4b71Sopenharmony_ci.translate { 36e41f4b71Sopenharmony_ci height: 150px; 37e41f4b71Sopenharmony_ci width: 300px; 38e41f4b71Sopenharmony_ci margin: 50px; 39e41f4b71Sopenharmony_ci font-size: 50px; 40e41f4b71Sopenharmony_ci background-color: #008000; 41e41f4b71Sopenharmony_ci transform: translate(200px); 42e41f4b71Sopenharmony_ci} 43e41f4b71Sopenharmony_ci.rotate { 44e41f4b71Sopenharmony_ci height: 150px; 45e41f4b71Sopenharmony_ci width: 300px; 46e41f4b71Sopenharmony_ci margin: 50px; 47e41f4b71Sopenharmony_ci font-size: 50px; 48e41f4b71Sopenharmony_ci background-color: #008000; 49e41f4b71Sopenharmony_ci transform-origin: 200px 100px; 50e41f4b71Sopenharmony_ci transform: rotate(45deg); 51e41f4b71Sopenharmony_ci} 52e41f4b71Sopenharmony_ci.scale { 53e41f4b71Sopenharmony_ci height: 150px; 54e41f4b71Sopenharmony_ci width: 300px; 55e41f4b71Sopenharmony_ci margin: 50px; 56e41f4b71Sopenharmony_ci font-size: 50px; 57e41f4b71Sopenharmony_ci background-color: #008000; 58e41f4b71Sopenharmony_ci transform: scaleX(1.5); 59e41f4b71Sopenharmony_ci} 60e41f4b71Sopenharmony_ci``` 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_ci**Figure 1** Static animation 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci 67e41f4b71Sopenharmony_ci## Continuous Animation 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ciThe static animation has only the start and end states. To set the transition state and conversion effect, use continuous animations. 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_ciThe core of a continuous animation is animation attributes, which define the start and end states of the animation and the curve of time and speed. Animation attributes can implement the following effects: 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci- **animation-name**: background color, opacity, width, height, and transformation type applied to the element after the animation is executed 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci- **animation-delay** and **animation-duration**: element delay and duration after the animation is executed 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ci- **animation-timing-function**: speed curve of an animation, which makes the animation more fluent 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci- **animation-iteration-count**: number of animation playback times 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci- **animation-fill-mode**: whether to restore the initial state after the animation is executed 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ciTo use the animation attributes, you need to define a @keyframes rule in the .css file, set the animation transition effect in **@keyframes**, and invoke the effect through a style class in the .hml file. The following is an example for **animation-name**: 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci```html 86e41f4b71Sopenharmony_ci<!-- xxx.hml --> 87e41f4b71Sopenharmony_ci<div class="item-container"> 88e41f4b71Sopenharmony_ci <div class="item {{colorParam}}"> 89e41f4b71Sopenharmony_ci <text class="txt">color</text> 90e41f4b71Sopenharmony_ci </div> 91e41f4b71Sopenharmony_ci <div class="item {{opacityParam}}"> 92e41f4b71Sopenharmony_ci <text class="txt">opacity</text> 93e41f4b71Sopenharmony_ci </div> 94e41f4b71Sopenharmony_ci <input class="button" type="button" name="" value="show" onclick="showAnimation"/> 95e41f4b71Sopenharmony_ci</div> 96e41f4b71Sopenharmony_ci``` 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci```css 99e41f4b71Sopenharmony_ci/* xxx.css */ 100e41f4b71Sopenharmony_ci.item-container { 101e41f4b71Sopenharmony_ci margin: 60px; 102e41f4b71Sopenharmony_ci flex-direction: column; 103e41f4b71Sopenharmony_ci} 104e41f4b71Sopenharmony_ci.item { 105e41f4b71Sopenharmony_ci width: 80%; 106e41f4b71Sopenharmony_ci background-color: #f76160; 107e41f4b71Sopenharmony_ci} 108e41f4b71Sopenharmony_ci.txt { 109e41f4b71Sopenharmony_ci text-align: center; 110e41f4b71Sopenharmony_ci width: 200px; 111e41f4b71Sopenharmony_ci height: 100px; 112e41f4b71Sopenharmony_ci} 113e41f4b71Sopenharmony_ci.button { 114e41f4b71Sopenharmony_ci width: 200px; 115e41f4b71Sopenharmony_ci margin: 10px; 116e41f4b71Sopenharmony_ci font-size: 30px; 117e41f4b71Sopenharmony_ci background-color: #09ba07; 118e41f4b71Sopenharmony_ci} 119e41f4b71Sopenharmony_ci.color { 120e41f4b71Sopenharmony_ci animation-name: Color; 121e41f4b71Sopenharmony_ci animation-duration: 8000ms; 122e41f4b71Sopenharmony_ci} 123e41f4b71Sopenharmony_ci.opacity { 124e41f4b71Sopenharmony_ci animation-name: Opacity; 125e41f4b71Sopenharmony_ci animation-duration: 8000ms; 126e41f4b71Sopenharmony_ci} 127e41f4b71Sopenharmony_ci@keyframes Color { 128e41f4b71Sopenharmony_ci from { 129e41f4b71Sopenharmony_ci background-color: #f76160; 130e41f4b71Sopenharmony_ci } 131e41f4b71Sopenharmony_ci to { 132e41f4b71Sopenharmony_ci background-color: #09ba07; 133e41f4b71Sopenharmony_ci } 134e41f4b71Sopenharmony_ci} 135e41f4b71Sopenharmony_ci@keyframes Opacity { 136e41f4b71Sopenharmony_ci from { 137e41f4b71Sopenharmony_ci opacity: 0.9; 138e41f4b71Sopenharmony_ci } 139e41f4b71Sopenharmony_ci to { 140e41f4b71Sopenharmony_ci opacity: 0.1; 141e41f4b71Sopenharmony_ci } 142e41f4b71Sopenharmony_ci} 143e41f4b71Sopenharmony_ci``` 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_ci```js 146e41f4b71Sopenharmony_ci// xxx.js 147e41f4b71Sopenharmony_ciexport default { 148e41f4b71Sopenharmony_ci data: { 149e41f4b71Sopenharmony_ci colorParam: '', 150e41f4b71Sopenharmony_ci opacityParam: '', 151e41f4b71Sopenharmony_ci }, 152e41f4b71Sopenharmony_ci showAnimation: function () { 153e41f4b71Sopenharmony_ci this.colorParam = ''; 154e41f4b71Sopenharmony_ci this.opacityParam = ''; 155e41f4b71Sopenharmony_ci this.colorParam = 'color'; 156e41f4b71Sopenharmony_ci this.opacityParam = 'opacity'; 157e41f4b71Sopenharmony_ci } 158e41f4b71Sopenharmony_ci} 159e41f4b71Sopenharmony_ci``` 160e41f4b71Sopenharmony_ci 161e41f4b71Sopenharmony_ci**Figure 2** Continuous animation effect 162e41f4b71Sopenharmony_ci 163e41f4b71Sopenharmony_ci 164