image元件動畫問題
現象描述:
stack 元件下使用兩個image 元件堆疊,一個image 元件透過動畫樣式設定透明度從1-0 ,隱藏起來,另一張顯示出來,從而來實現圖片切換,前一張圖片會機率性的閃現然後消失。
問題程式碼如下:
<template> <div class="page-wrapper"> <input type="button" class="button" onclick="onCallAnimationClick" value="Animation 動畫" /> <stack style="width:400px;height:400px"> <image class="img" id="img1" src="{{imgUrl}}" oncomplete="imgcomplete"></image> <image class="img" id="img2" if="{{ximg}}" src="{{preUrl}}" oncomplete="imgcomplete2" style="{{'opacity:' + preop + ';'}}"></image> </stack> </div> </template> <script> export default { data: { imgsrc: [" "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.aiimg.com%2Fuploads%2Fuserup%2F0909%2F2Z64022L38.jpg&refer=http%3A%2F%2Fimg.aiimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=879ac47e0bd97e413b5462946d9ae4ed", "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.16pic.com%2F00%2F01%2F11%2F16pic_111395_b.jpg&refer=http%3A%2F%2Fpic3.16pic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=70c702a55248113dafa6e243dc253625", "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa2.att.hudong.com%2F27%2F81%2F01200000194677136358818023076.jpg&refer=http%3A%2F%2Fa2.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=11199190c6ac8e3371f16d7568d40daa", " "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa3.att.hudong.com%2F92%2F04%2F01000000000000119090475560392.jpg&refer=http%3A%2F%2Fa3.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=3b33c5b006bcba88a24d03cfbca1ad20", " "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa1.att.hudong.com%2F62%2F02%2F01300542526392139955025309984.jpg&refer=http%3A%2F%2Fa1.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=6500d50b1680d27bb60fe044e90ce41b", ], imgUrl:'', preUrl:'', ximg:true, preop:0, i:0 }, onInit: function () { this.imgUrl = this.imgsrc[0] }, onCallAnimationClick() { if(this.i > 6){ this.i = 0 ; this.imgUrl = this.imgsrc[this.i] }else{ this.i++ this.imgUrl = this.imgsrc[this.i] } console.log('imgcomplete=',this.i) }, imgcomplete(){ console.log('imgcomplete 1') this.preop = 1 var options = { duration: 500, easing: 'linear', delay: 0, fill: 'forwards', iterations: 1 } var frames = [{ opacity: 1 }, { opacity: 0 }]; var animation = this.$element('img2').animate(frames, options); animation.play(); var self = this animation.onfinish = function () { console.log("imgcomplete animation onfinish"); self.ximg = false self.preop = 0 setTimeout(() => { self.ximg = true self.preUrl = self.$element("img1").attr.src }, 30); } }, imgcomplete2() { console.log('imgcomplete 2') setTimeout(() => { this.preop = 1 }, 50); }, } </script> <style> .page-wrapper { flex-direction: column; justify-content: center; align-items: center; } .img{ width:100%; height:100%; } .button { color: #20a0ff; background-color: #ffffff; padding: 10px 20px; border: 1px solid #20a0ff; border-radius: 40px; } </style>
問題分析:
上述程式碼用兩個image 元件實現了圖片切換時淡入淡出的動畫效果,主要是透過透明度實現的。第二個image 的css 中設定了透明度,但是imgcomplete() 方法中又對該image 元件做了透明度動畫,透明度值從1 到0 ,同時程式碼中又將css 中繫結的透明度變數preop 設定為1 。
當動畫方法完成時間先於css ,就會出現這個情況。
解決方法:
template 中第二個image 元件的style="{{'opacity:' + preop + ';'}}" 去掉,改為透過動畫樣式來呼叫,從0-1 變化。
修改程式碼如下:
<template> <div class="page-wrapper"> <input type="button" class="button" onclick="onCallAnimationClick" value="Animation 動畫" /> <stack style="width:400px;height:400px"> <image class="img" id="img1" src="{{imgUrl}}" oncomplete="imgcomplete"></image> <image class="img" id="img2" if="{{ximg}}" src="{{preUrl}}" oncomplete="imgcomplete2" ></image> </stack> </div> </template> <script> export default { data: { imgsrc: [" "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.aiimg.com%2Fuploads%2Fuserup%2F0909%2F2Z64022L38.jpg&refer=http%3A%2F%2Fimg.aiimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=879ac47e0bd97e413b5462946d9ae4ed", "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic3.16pic.com%2F00%2F01%2F11%2F16pic_111395_b.jpg&refer=http%3A%2F%2Fpic3.16pic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=70c702a55248113dafa6e243dc253625", "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa2.att.hudong.com%2F27%2F81%2F01200000194677136358818023076.jpg&refer=http%3A%2F%2Fa2.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=11199190c6ac8e3371f16d7568d40daa", " "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa3.att.hudong.com%2F92%2F04%2F01000000000000119090475560392.jpg&refer=http%3A%2F%2Fa3.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=3b33c5b006bcba88a24d03cfbca1ad20", " "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fa1.att.hudong.com%2F62%2F02%2F01300542526392139955025309984.jpg&refer=http%3A%2F%2Fa1.att.hudong.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1611368024&t=6500d50b1680d27bb60fe044e90ce41b", ], imgUrl:'', preUrl:'', ximg:true, preop:0, i:0 }, onInit: function () { this.imgUrl = this.imgsrc[0] }, ... //省略 imgcomplete2() { console.log('imgcomplete 2') var options = { duration: 10, easing: 'linear', delay: 0, fill: 'forwards', iterations: 1 } var frames = [{ opacity: 0 }, { opacity: 1 }]; var animation = this.$element('img2').animate(frames, options); animation.play(); }, } </script>
欲瞭解更多詳情,請參見:
快應用動畫:
https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-api-animate
快應用通用樣式:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2784918/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XamarinAndroid元件教程RecylerView動畫元件使用動畫(3)NaNAndroid元件View動畫
- XamarinAndroid元件教程RecylerView動畫元件使用動畫(2)NaNAndroid元件View動畫
- Flutter元件ImageFlutter元件
- 04.Android之動畫問題Android動畫
- Flutter動畫 5 - Flutter內建動畫元件Flutter動畫元件
- Flutter動畫之自定義動畫元件-FlutterLayoutFlutter動畫元件
- RecylerView動畫元件RecylerViewAnimatorsView動畫元件
- LVGL中roller滾動動畫錯亂的問題動畫
- WPF 讀取圖片 賦值Image控制元件 解決圖片佔用問題賦值控制元件
- electron-vue 專案新增啟動loading動畫問題Vue動畫
- transition動畫z-index層級失效問題動畫Index
- Flutter常用控制元件-ImageFlutter控制元件
- Flutter元件學習(二)—— ImageFlutter元件
- 爆炸銷燬動畫元件Explosions動畫元件
- 鴻蒙HarmonyO實戰-ArkUI動畫(元件內轉場動畫)鴻蒙UI動畫元件
- Xamarin Android元件篇教程RecylerView動畫元件RecylerViewAnimators(1)Android元件View動畫
- 動態規劃問題為什麼要畫表格?動態規劃
- WPF給控制元件新增運動動畫控制元件動畫
- 手寫一個 React 動畫元件React動畫元件
- 關於vue中image控制元件,onload事件裡,event.target 為null的奇怪問題探討Vue控制元件事件Null
- CSS 動畫專題CSS動畫
- iOS鍵盤彈出時動畫時長失效問題iOS動畫
- dumi 打包元件庫問題元件
- 萬彩動畫大師教程 | 如何新增花紋裝飾動畫元件動畫元件
- CSS3中用background-image實現粒子動畫效果CSSS3動畫
- Flutter 動畫控制元件收集專案Flutter動畫控制元件
- 檢視屬性+物件動畫元件ViewPropertyObjectAnimator物件動畫元件ViewObject
- 鴻蒙HarmonyOS實戰-ArkUI元件(Image)鴻蒙UI元件
- vue-解決background-image:url不顯示問題Vue
- vue元件(component)傳值問題Vue元件
- 雙輪播加切換動畫效果元件動畫元件
- 文字路徑動畫控制元件TextPathView解析動畫控制元件View
- XamarinAndroid元件教程RecylerView介面卡使用動畫NaNAndroid元件View動畫
- 《Flutter 動畫系列二》Google工程師帶你選擇Flutter動畫控制元件Flutter動畫Go工程師控制元件
- stb_image multiple definition of first defined here 多檔案包含問題
- Animated Wallpapers for Mac高畫質動畫主題桌布Mac動畫
- vue 元件(component)命名的小細節問題(大小寫問題)Vue元件
- iOS動畫專題·UIView二維形變動畫與CAAnimation核心動畫(transform動畫,基礎,關鍵幀,組動畫,路徑動畫,貝塞爾曲線)iOS動畫UIViewORM