• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# image-animator开发指导
2
3
4image-animator组件为图片帧动画播放器。具体用法请参考[image-animator](../reference/arkui-js/js-components-basic-image-animator.md)。
5
6
7## 创建image-animator组件
8
9pages/index目录下的hml文件中创建一个image-animator组件,css文件中编写组件样式,js文件中引用图片。
10
11
12```html
13<!-- xxx.hml -->
14<div class="container">
15  <image-animator class="animator" images="{{frames}}" duration="3s"/>
16</div>
17```
18
19
20```css
21/* xxx.css */
22.container {
23  width: 100%;
24  height: 100%;
25  flex-direction: column;
26  justify-content: center;
27  align-items: center;
28  background-color: #F1F3F5;
29}
30.animator {
31  width: 500px;
32  height: 500px;
33}
34```
35
36
37```js
38// index.js
39export default {
40  data: {
41    frames: [
42      {
43        src: "/common/landscape1.jpg",
44      },
45      {
46        src: "/common/landscape2.jpg",
47      }
48    ],
49  },
50};
51```
52
53![zh-cn_image_0000001218278612](figures/zh-cn_image_0000001218278612.gif)
54
55
56## 设置image-animator组件属性
57
58添加iteration(播放次数)、reverse(播放顺序)、fixedsize(图片大小是否固定为组件大小)、duration(播放时长)和fillmode(执行结束后的状态)属性,控制图片的播放效果。
59
60
61```html
62<!-- xxx.hml -->
63<div class="container">
64  <image-animator class="animator" fixedsize="false" iteration='2' reverse="false" ref="animator" fillmode="none" images="{{frames}}"   duration="5s" />
65</div>
66```
67
68
69```css
70/* xxx.css */
71.container {
72  width: 100%;
73  height: 100%;
74  flex-direction: column;
75  background-color: #F1F3F5;
76}
77.animator {
78  width: 500px;
79  height: 500px;
80}
81```
82
83
84```js
85// index.js
86export default {
87  data: {
88    frames: [
89      {
90        src: 'common/landscape1.jpg',
91        width: '250px',
92        height: '250px',
93        left: '150px',
94        top: '50px',
95      },
96      {
97        src: 'common/landscape2.jpg',
98        width: '300px',
99        height: '300px',
100        left: '150px',
101        top: '100px',
102      },
103      {
104        src: 'common/landscape1.jpg',
105        width: '350px',
106        height: '350px',
107        left: '150px',
108        top: '150px',
109      },
110      {
111        src: 'common/landscape2.jpg',
112        width: '400px',
113        height: '400px',
114        left: '150px',
115        top: '200px',
116      },
117      {
118        src: 'common/landscape3.jpg',
119        width: '450px',
120        height: '450px',
121        left: '150px',
122        top: '250px',
123      },
124      {
125        src: 'common/landscape4.jpg',
126        width: '500px',
127        height: '500px',
128        left: '150px',
129        top: '300px',
130      },
131    ],
132  },
133};
134```
135
136![zh-cn_image_0000001218598678](figures/zh-cn_image_0000001218598678.gif)
137
138> **说明:**
139> - 如果在images属性中设置了单独的duration属性,在image-animator组件中设置的duration属性无效。
140>
141> - 如果fixedsize属性值设置为true,图片的width 、height 、top 和left属性无效。
142>
143> - 如果reverse属性值设置为false,表示从第1张图片播放到最后1张图片。 如果reverse属性值设置为true,表示从最后1张图片播放到第1张图片。
144
145
146## 绑定事件
147
148向image-animator组件添加start、pause、stop和resume事件。当图片播放器开始播放时触发start事件,当图片播放器被点击时触发pause事件,长按图片播放器触发resume事件,图片播放器停止播放时触发stop事件。
149
150
151```html
152<!-- xxx.hml -->
153<div class="doc-page">
154  <image-animator class="img" id="img" images="{{imginfo}}" iteration="1" duration="10s" onstart="popstart" onpause="poppause"   onstop="popstop" onresume="popresume" onlongpress="setresume" onclick="setpause">
155  </image-animator>
156</div>
157```
158
159
160```css
161/* xxx.css */
162.doc-page {
163  width: 100%;
164  height: 100%;
165  flex-direction: column;
166  align-items: center;
167  justify-content: center;
168   background-color: #F1F3F5;
169}
170.img {
171  width: 600px;
172  height: 600px;
173  border: 3px solid orange;
174}
175```
176
177
178```js
179// index.js
180import promptAction from '@ohos.promptAction';
181export default {
182  data: {
183    imginfo: [
184      {
185        src: 'common/landscape1.jpg',
186      },{
187        src: 'common/landscape2.jpg',
188      },{
189        src: 'common/landscape3.jpg',
190      },{
191        src: 'common/landscape4.jpg',
192      }
193    ],
194  },
195  onInit() {
196  },
197  setpause(e) {
198    this.$element('img').pause()
199  },
200  setresume(e) {
201    this.$element('img').resume()
202  },
203  popstart(e) {
204    promptAction.showToast({
205      message: '开始'
206    })
207  },
208  poppause(e) {
209    promptAction.showToast({
210      message: '暂停'
211    })
212  },
213  popstop(e) {
214    promptAction.showToast({
215      message: '停止'
216    })
217  },
218  popresume(e) {
219    promptAction.showToast({
220      message: '恢复'
221    })
222  }
223}
224```
225
226![zh-cn_image_0000001263278477](figures/zh-cn_image_0000001263278477.gif)
227
228
229## 场景示例
230
231在本场景中,开发者可通过开始播放、停止播放等按钮切换图片的播放状态。
232
233image-animator组件通过调用start、pause、stop和resume方法控制图片的开始、暂停、停止和重新播放,通过getState方法查询图片的播放状态。
234
235
236```html
237<!-- xxx.hml -->
238<div class="doc-page">
239  <image-animator class="img" id="img" images="{{imginfo}}" iteration="2" reverse="{{rev}}" duration="10s">
240  </image-animator>
241  <div style="width: 700px;height:450px;margin-top: 40px;flex-direction:column;justify-content:space-around;">
242    <div class="container">
243      <button type="capsule" value="开始播放" onclick="startimg"></button>
244      <button type="capsule" value="暂停播放" onclick="pauseimg"></button>
245    </div>
246    <div class="container">
247      <button type="capsule" value="停止播放" onclick="stopimg"></button>
248      <button type="capsule" value="重新播放" onclick="resumeimg"></button>
249    </div>
250    <div class="container">
251      <button type="capsule" value="获取播放状态" onclick="getimgstate"></button>
252      <button type="capsule" value="{{revVal}}" onclick="revimg"></button>
253    </div>
254  </div>
255</div>
256```
257
258
259```css
260/* xxx.css */
261.doc-page {
262  width: 100%;
263  height: 100%;
264  flex-direction: column;
265  align-items: center;
266  justify-content: center;
267  background-color: #F1F3F5;
268}
269.img {
270  width: 600px;
271  height: 600px;
272  border: 3px solid orange;
273}
274button{
275  width: 260px
276}
277.container {
278  width: 100%;
279  height: 120px;
280  align-items: center;
281  justify-content: space-around;
282}
283```
284
285
286```js
287// index.js
288import promptAction from '@ohos.promptAction';
289export default {
290  data: {
291    rev:false,
292    imginfo: [
293      {
294        src: 'common/landscape1.jpg',
295      },{
296        src: 'common/landscape2.jpg',
297      },{
298        src: 'common/landscape3.jpg',
299      },{
300        src: 'common/landscape4.jpg',
301      }
302    ],
303    revVal: '反向播放'
304  },
305  onInit() {
306  },
307  startimg(e) {
308    this.$element('img').start()
309  },
310  pauseimg(e) {
311    this.$element('img').pause()
312  },
313  stopimg(e) {
314    this.$element('img').stop()
315  },
316  resumeimg(e) {
317    this.$element('img').resume()
318  },
319  getimgstate(e) {
320    promptAction.showToast({
321      message: '当前状态:' + this.$element('img').getState()
322    })
323  },
324  revimg(e) {
325    this.rev = !this.rev
326    if (this.rev) {
327      this.revVal = '正向播放'
328    } else {
329      this.revVal = '反向播放'
330    }
331  }
332}
333```
334
335![zh-cn_image_0000001218758816](figures/zh-cn_image_0000001218758816.gif)
336
337
338## 相关实例
339
340针对image-animator开发,有以下相关实例可供参考:
341
342- [image、image-animator(JS)(API8)](https://gitee.com/openharmony/codelabs/tree/master/JSUI/ClickableJsDemo)
343