成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從微信小程序到鴻蒙JS開發-CSS3動畫&JS動畫&定時器

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com

[[383195]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

在進入APP時,通常都會有一個歡迎界面,用于展示APP的名稱、logo,并預先加載部分數據。既然是歡迎頁面,自然少不了一些動畫元素。簡單運用了CSS3和JS的動畫效果,progress組件以及倒計時擼了一個歡迎頁面。直接上效果:

1、基于CSS3的動畫效果

1.1 給動畫元素設置animation屬性。

  • animation-name:動畫名
  • animation-duration:動畫持續時間
  • animation-delay:動畫開始前延遲時間
  • animation-iteration-count:動畫重復次數
  • animation-timing-function:動畫執行速度
  • animation-fill-mode:動畫模式
  1. <image src="/common/huaWei.jpeg" class="logo"></image> 

  1. .logo { 
  2.     width: 300px; 
  3.     height: 300px; 
  4.     border-radius: 150px; 
  5.     animation-name: an1; 
  6.     animation-duration: 5s; 
  7.     animation-iteration-count: 1; 
  8.     animation-timing-function: linear; 
  9.     animation-fill-mode: none; 

1.2 用"@keyframes 動畫名"匹配設置動畫規則。

  1. @keyframes an1 { 
  2.         from { 
  3.             transform: rotate(180deg); 
  4.             opacity: 0.3; 
  5.         } 
  6.         to { 
  7.             transform: rotate(360deg); 
  8.             opacity: 1.0; 
  9.         } 

除from,to外,還可以使用百分比(如20%{...})方式設置動畫途中的效果。

以上兩步,就實現了gif圖中HUAWEI的logo旋轉和逐漸清晰的動畫效果。

2、基于JS的動畫效果

2.1 動畫元素給定id/ref等可以用于元素匹配的屬性。

  1. <image src="/common/liteMall.png" class="textImg" id="textImg"></image> 

2.2 在onShow()方法中獲取元素實例,并用animate()方法給定動畫規則和基本屬性。注意這一步在onInit()和onReady()中執行是沒有效果的。

animate()接受兩個參數,第一個為數組,指定動畫的關鍵幀效果。第二個為對象,指定動畫的基本屬性。

2.3 調用play()方法開始動畫執行。

  1. onShow() { 
  2.      // 設置動畫 
  3.      let textImg = this.$element("textImg").animate([ 
  4.          { 
  5.              transform: {translateY: '200px'}, opacity: 0.1 
  6.          }, 
  7.          { 
  8.              transform: {translateY: '0px'}, opacity: 1 
  9.          } 
  10.      ], { 
  11.          duration: 5000, 
  12.          easing: "linear-out-slow-in"
  13.          fill: "forwards"
  14.          iterations: 1 
  15.      }); 
  16.      textImg.play(); 
  17.      ...... 
  18.  } 

這個方法在開發者文檔中未找到說明,但證實可用,且IDE也是有提示的。

transform其中的key輸入卻是沒有提示了。

這里寫完后會有紅線說缺少屬性,但運行是沒問題的,可以忽略。如果看著難受可以把數組單獨聲明為一個變量,再作為animate()方法入參。

以上三步,就實現了gif圖中"litemall"字樣從下方上移并逐漸清晰的動畫效果。

對比CSS3的動畫技術,使用JS實現動畫會更有靈活性。可以在onShow()中定義動畫,在用戶進行一定操作后再執行。CSS3的只能在頁面顯示后一定時間執行,但可以用百分比的形式定義更豐富的動畫漸變效果。

3、JS定時器

setTimeout()和setInterval()兩個定時函數在鴻蒙中可以無縫對接使用。

gif圖中的倒計時使用setInterval()實現每1秒倒數一個數并改變省略號的個數,在倒數到0時清除定時器。為防止僵尸線程影響性能,切記調用clearTimeout()和clearInterval()清除掉定時器。

倒計時部分,hml視圖層:

  1. <div class="loading"
  2.     <progress type="circular"></progress> 
  3.     <text> 
  4.         {{ loading }} 
  5.     </text> 
  6. </div> 
  7. <text class="count"
  8.     {{ seconds }} 
  9. </text> 

css渲染層:

  1. .loading { 
  2.     width: 100%; 
  3.     height: 150px; 
  4.     display: flex; 
  5.     justify-content: center; 
  6.     align-items: center; 
  7. progress { 
  8.     width: 120px; 
  9.     height: 120px; 
  10. .loading>text { 
  11.     font-size: 40px; 
  12.     color: #666666; 
  13. .count { 
  14.     position: fixed; 
  15.     bottom: 385px; 
  16.     left: 225px; 
  17.     font-size: 60px; 
  18.     color: #666666; 

js邏輯層:

  1. onShow() { 
  2.   ...... 
  3.       // 設置倒計時 
  4.       let iv = setInterval(() => { 
  5.           let suffix; 
  6.           switch (this.seconds % 3) { 
  7.               case 2: 
  8.               suffix = "..."
  9.               break; 
  10.               case 1: 
  11.               suffix = ".."
  12.               break; 
  13.               default
  14.               suffix = "."
  15.               break; 
  16.           } 
  17.           this.loading = "數據加載中" + suffix; 
  18.           this.seconds--; 
  19.           if (this.seconds == 0) { 
  20.               clearInterval(iv); 
  21.           } 
  22.       }, 1000); 
  23.   } 

頁面會在動畫播放完成后跳轉到商城首頁,使用setTimeout()設置定時跳轉即可。這里在播放動畫時預加載了首頁需要的數據,作為頁面參數跳轉,可以加快商城頁的展示速度,提升用戶體驗。

  1. onInit() { 
  2.      // 首頁數據預加載 
  3.      // 獲取廣告圖片 
  4.      fetch.fetch({ 
  5.          ...... 
  6.      }); 
  7.      // 獲取推薦商品 
  8.      fetch.fetch({ 
  9.          ...... 
  10.      }); 
  11.      // 獲取一級分類 
  12.      fetch.fetch({ 
  13.          ...... 
  14.      }); 
  15.  }, 
  16.  onShow() { 
  17.      // 設置定時跳轉 
  18.      let to = setTimeout(() => { 
  19.          router.replace({ 
  20.              uri: "pages/index/index"
  21.              params: { 
  22.                  ad: this.ad, 
  23.                  newGoods: this.newGoods, 
  24.                  hotGoods: this.hotGoods, 
  25.                  types: this.types 
  26.              } 
  27.          }); 
  28.          clearTimeout(to); 
  29.      }, 6000); 
  30.  ...... 
  31.  } 

4、微信小程序的動畫效果

最后寫一寫微信小程序的動畫實現,在wxss中同樣支持CSS3的動畫屬性:

  1. .happy { 
  2.   font-size: 50rpx; 
  3.   color: #e20a0b; 
  4.   animation-name: an1; 
  5.   animation-duration: 5s; 
  6.   animation-delay: 500ms; 
  7.   animation-iteration-count: infinite; 
  8.   animation-direction: normal; 
  9.   animation-fill-mode: forwards; 
  10.   animation-timing-function: linear; 
  11. @keyframes an1 { 
  12.   from { 
  13.     transform: translateX(0px); 
  14.     opacity: 0.5; 
  15.   } 
  16.   to { 
  17.     transform: translateX(300px); 
  18.     opacity: 1; 
  19.   } 

微信小程序的動畫JS實現方式和鴻蒙有很大不同,是通過微信提供的API定義并實現動畫。接口提供了豐富的方法,可在開發者文檔查閱。

  1. Page({ 
  2.  
  3.   /** 
  4.    * 頁面的初始數據 
  5.    */ 
  6.   data: { 
  7.     an2: null 
  8.   }, 
  9.  
  10.   onShow: function () { 
  11.     let an2 = wx.createAnimation({ 
  12.       delay: 500, 
  13.       duration: 5000, 
  14.       timingFunction: 'ease-in-out' 
  15.     }); 
  16.     an2.translate(100, 300).step(); 
  17.     an2.rotate(90).opacity(0.1).step(); 
  18.     this.setData({ 
  19.       an2: an2.export() 
  20.     }) 
  21.   }, 

動畫基本屬性作為createAnimation()方法的入參,動畫關鍵幀由一連串的方法流式操作給出,以step()結束。這里一個動畫的執行的時間是duration給定的時間。動畫對象需使用export()導出到data中,并和頁面元素的animation屬性綁定。

  1. <view class="happy" animation="{{ an2 }}"
  2.   新年快樂 
  3. </view

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-03-02 09:29:29

鴻蒙HarmonyOS應用開發

2021-02-23 12:25:26

鴻蒙HarmonyOS應用開發

2021-02-20 09:52:02

鴻蒙HarmonyOS應用開發

2021-02-21 11:09:18

鴻蒙HarmonyOS應用開發

2021-02-23 12:23:57

鴻蒙HarmonyOS應用開發

2021-02-25 10:01:19

鴻蒙HarmonyOS應用開發

2021-02-22 14:56:55

鴻蒙HarmonyOS應用開發

2021-02-04 13:49:41

鴻蒙HarmonyOS應用開發

2021-02-23 09:52:42

鴻蒙HarmonyOS應用開發

2021-02-05 09:46:16

鴻蒙HarmonyOSjs開發

2021-02-25 15:13:08

鴻蒙HarmonyOS應用開發

2012-09-13 09:24:31

CSSJSjQ

2021-02-07 09:17:24

鴻蒙HarmonyOS應用開發

2017-05-11 15:20:52

CSS3動畫前端

2014-04-29 10:39:27

CSS3JavaScript

2012-05-25 10:31:44

HTML5

2011-06-29 13:22:58

CSS3

2015-10-14 09:50:11

css3動畫模擬

2022-10-20 11:49:49

JS動畫幀,CSS

2013-01-30 16:15:40

adobeHTML5css3
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美lesbianxxxxhd视频社区 | 伊人免费观看视频 | 成人免费在线视频 | 国产欧美在线视频 | 国产高清精品一区 | 成人在线中文字幕 | 久久激情视频 | 国产色网站 | 色屁屁在线观看 | 欧美高清成人 | 亚洲色图图片 | 久久久久国产一区二区三区 | 国产精品99久 | 成人毛片视频在线播放 | 中文字幕一区二区在线观看 | 欧美一级免费看 | 黄色三级免费网站 | 北条麻妃一区二区三区在线观看 | 在线视频一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 欧美国产亚洲一区二区 | 亚洲精品自拍视频 | 一区二区三区在线 | 欧 | 爽爽免费视频 | 天天看天天操 | 国产精品自产av一区二区三区 | 在线免费中文字幕 | 国产精品亚洲片在线播放 | 国产免费一区二区 | chinese中国真实乱对白 | 91色视频在线观看 | 国产中文一区二区三区 | 天天想天天干 | 在线观看亚洲欧美 | 精品久久电影 | 久久久久久九九九九 | 一级片在线播放 | 国产精品久久久久久久久免费相片 | 伊人影院在线观看 | 在线色 | 国产精品99久久久久久久久 |