ui-js-building-ui-animation.md 3.7 KB
Newer Older
Z
zengyawen 已提交
1
# 动画
M
mamingshuai 已提交
2

Z
zengyawen 已提交
3
动画分为[静态动画](#静态动画)[连续动画](#连续动画)
M
mamingshuai 已提交
4

Z
zengyawen 已提交
5 6

## 静态动画
M
mamingshuai 已提交
7 8 9

静态动画的核心是transform样式,主要可以实现以下三种变换类型,一次样式设置只能实现一种类型变换。

Z
zengyawen 已提交
10 11 12 13 14
- **translate**:沿水平或垂直方向将指定组件移动所需距离。

- **scale**:横向或纵向将指定组件缩小或放大到所需比例。

- **rotate**:将指定组件沿横轴或纵轴或中心点旋转指定的角度。
M
mamingshuai 已提交
15

Z
zengyawen 已提交
16
具体的使用示例如下,更多信息请参考[组件方法](../reference/arkui-js/js-components-common-methods.md)
M
mamingshuai 已提交
17

H
HelloCrease 已提交
18
```html
M
mamingshuai 已提交
19 20 21 22 23 24 25 26
<!-- xxx.hml -->
<div class="container">
  <text class="translate">hello</text>
  <text class="rotate">hello</text>
  <text class="scale">hello</text>
</div>
```

H
HelloCrease 已提交
27
```css
M
mamingshuai 已提交
28 29
/* xxx.css */
.container {
L
luoying_ace_admin 已提交
30
  width: 100%;
M
mamingshuai 已提交
31 32 33 34 35 36
  flex-direction: column;
  align-items: center;
}
.translate {
  height: 150px;
  width: 300px;
L
luoying_ace_admin 已提交
37
  margin: 50px;
M
mamingshuai 已提交
38 39 40 41 42 43 44
  font-size: 50px;
  background-color: #008000;
  transform: translate(200px);
}
.rotate {
  height: 150px;
  width: 300px;
L
luoying_ace_admin 已提交
45
  margin: 50px;
M
mamingshuai 已提交
46 47 48
  font-size: 50px;
  background-color: #008000;
  transform-origin: 200px 100px;
L
luoying_ace_admin 已提交
49
  transform: rotate(45deg);
M
mamingshuai 已提交
50 51 52 53
}
.scale {
  height: 150px;
  width: 300px;
L
luoying_ace_admin 已提交
54
  margin: 50px;
M
mamingshuai 已提交
55 56 57 58 59 60 61
  font-size: 50px;
  background-color: #008000;
  transform: scaleX(1.5);
}
```


Z
zengyawen 已提交
62
**图1** 静态动画效果图
63

Z
zengyawen 已提交
64
![zh-cn_image_0000001071134933](figures/zh-cn_image_0000001071134933.png)
Z
zengyawen 已提交
65 66 67


## 连续动画
M
mamingshuai 已提交
68 69 70 71 72

静态动画只有开始状态和结束状态,没有中间状态,如果需要设置中间的过渡状态和转换效果,需要使用连续动画实现。

连续动画的核心是animation样式,它定义了动画的开始状态、结束状态以及时间和速度的变化曲线。通过animation样式可以实现的效果有:

Z
zengyawen 已提交
73 74
- **animation-name**:设置动画执行后应用到组件上的背景颜色、透明度、宽高和变换类型。

Z
zengyawen 已提交
75
- **animation-delay****animation-duration**:分别设置动画执行后元素延迟和持续的时间。
Z
zengyawen 已提交
76 77 78 79 80 81

- **animation-timing-function**:描述动画执行的速度曲线,使动画更加平滑。

- **animation-iteration-count**:定义动画播放的次数。

- **animation-fill-mode**:指定动画执行结束后是否恢复初始状态。
M
mamingshuai 已提交
82 83 84

animation样式需要在css文件中先定义keyframe,在keyframe中设置动画的过渡效果,并通过一个样式类型在hml文件中调用。animation-name的使用示例如下:

H
HelloCrease 已提交
85
```html
M
mamingshuai 已提交
86 87
<!-- xxx.hml -->
<div class="item-container">
L
luoying_ace_admin 已提交
88 89 90 91 92 93 94
    <div class="item {{colorParam}}">
        <text class="txt">color</text>
    </div>
    <div class="item {{opacityParam}}">
        <text class="txt">opacity</text>
    </div>
    <input class="button" type="button" name="" value="show" onclick="showAnimation"/>
M
mamingshuai 已提交
95 96 97
</div>
```

H
HelloCrease 已提交
98
```css
M
mamingshuai 已提交
99 100
/* xxx.css */
.item-container {
L
luoying_ace_admin 已提交
101
  margin: 60px;
M
mamingshuai 已提交
102 103 104
  flex-direction: column;
}
.item {
L
luoying_ace_admin 已提交
105
  width: 80%;
M
mamingshuai 已提交
106 107 108 109 110 111 112 113 114
  background-color: #f76160;
}
.txt {
  text-align: center;
  width: 200px;
  height: 100px;
}
.button {
  width: 200px;
L
luoying_ace_admin 已提交
115
  margin: 10px;
M
mamingshuai 已提交
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
  font-size: 30px;
  background-color: #09ba07;
}
.color {
  animation-name: Color;
  animation-duration: 8000ms;
}
.opacity {
  animation-name: Opacity;
  animation-duration: 8000ms;
}
@keyframes Color {
  from {
    background-color: #f76160;
  }
  to {
    background-color: #09ba07;
  }
}
@keyframes Opacity {
  from {
    opacity: 0.9;
  }
  to {
    opacity: 0.1;
  }
}
```

L
luoying_ace_admin 已提交
145
```js
M
mamingshuai 已提交
146 147 148 149 150 151 152 153 154 155 156
// xxx.js
export default {
  data: {
    colorParam: '',
    opacityParam: '',
  },
  showAnimation: function () {
    this.colorParam = '';
    this.opacityParam = '';
    this.colorParam = 'color';
    this.opacityParam = 'opacity';
L
luoying_ace_admin 已提交
157
  }
M
mamingshuai 已提交
158 159 160
}
```

Z
zengyawen 已提交
161
**图2** 连续动画效果图
162

Z
zengyawen 已提交
163
![zh-cn_image_0000001063148757](figures/zh-cn_image_0000001063148757.gif)