最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mpvue小程序循環(huán)動畫開啟暫停的實現(xiàn)方法

 更新時間:2019年05月15日 10:20:03   作者:tingzhong  
這篇文章主要介紹了mpvue小程序循環(huán)動畫開啟暫停的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

用小程序的 animation 屬性實現(xiàn)循環(huán)動畫的開啟與暫停,并封裝到組件。

實現(xiàn)一個字體圖標(biāo)組件的循環(huán)旋轉(zhuǎn)動畫開啟/暫停

  1. 用于點擊圖標(biāo),字體顏色變換,開始循環(huán)旋轉(zhuǎn)動畫,并刷新內(nèi)容
  2. 刷新結(jié)束,停止動畫,并設(shè)置字體顏色為原來的
  3. 主要利用 setInterval 定時器循環(huán)執(zhí)行動畫

首先,組件寫出來

添加點擊事件,動畫屬性, style 屬性(用來動態(tài)修改樣式)

src/components/refresh.vue

<template>
 <div>
  <div
   class="iconfont icon-shuaxin"
   :animation='refreshA'
   @click="refresh"
   :style='style'></div>
 </div>
</template>

設(shè)置初始數(shù)據(jù)

使用一個 布爾 數(shù)據(jù) refreshing 判斷動畫的狀態(tài)為開啟 true /暫停 false

<script>
export default {
 data () {
  return {
   refreshA: null,
   style: 'color: #eee;',
   // 用來設(shè)置存儲旋轉(zhuǎn)的度數(shù)
   rotate: 0,
   // 存儲定時器id
   refreshI: null
  }
 },
 props: ['refreshing']
}
</script>

添加點擊事件函數(shù)

<script>
export default {
 methods: {
  // 刷新按鈕點擊
  refresh () {
   // 正在刷新 則跳出,避免在循環(huán)動畫執(zhí)行時,再次出發(fā)點擊刷新事件
   if (this.refreshing) return
   // 否則提交刷新事件
   this.$emit('refresh')
  },
  // 刷新動畫結(jié)束
  refreshend () {
   // 當(dāng)動畫結(jié)束,字體顏色恢復(fù)原來
   this.style = 'color: #eee;'
  }
 }
}
</script>

監(jiān)聽 refreshing 狀態(tài)

<script>
export default {
 watch: {
  refreshing (newV, oldV) {
   // 沒有正在刷新 > 正在刷新 設(shè)置循環(huán)動畫
   if (newV && !oldV) {
    this.style = 'color: #fff;'
    this.refreshI = setInterval(() => {
    // 每次 +360 實現(xiàn)每 300 毫秒旋轉(zhuǎn) 360 度 
     this.rotate += 360
     let animation = wx.createAnimation()
     animation.rotateZ(this.rotate).step()
     this.refreshA = animation.export()
    }, 300)
    return
   }
   // 從正在刷新 > 刷新完成 清空循環(huán)定時器動畫
   if (!newV && oldV) {
    clearInterval(this.refreshI)
    this.refreshA = null
   }
  }
 }
}
</script>

需要注意的是定時器時間必須和動畫的過渡時間設(shè)置為相同

組件調(diào)用

src/pages/index/index.vue

<template>
 <div>
  <Refresh @refresh='refresh' :refreshing='refreshing'/>
 </div>
</template>

<script>
import Refresh from '@/components/refresh'

export default {
 data: {
  // 初始狀態(tài)肯定為 false ,點擊刷新組件后,在事件函數(shù)中再設(shè)置為 true
  refreshing: false
 },
 components: {
  Refresh
 },
 methods: {
  async refresh () {
  this.refreshing = true
  // 這里為一個異步請求api
  let data = await api.getData()
  // 請求完成,執(zhí)行想要操作的代碼后,設(shè)置動畫為 false
  // this.data = data
  this.refreshing = false
  }
 }
}
</script>

<style lang="stylus" scoped>
</style>

refresh 組件完整代碼

<template>
 <div>
  <div
   class="iconfont icon-shuaxin"
   :animation='refreshA'
   @click="refresh"
   :style='style'></div>
 </div>
</template>

<script>
export default {
 data () {
  return {
   refreshA: null,
   style: 'color: #eee;',
   rotate: 0,
   refreshI: null
  }
 },
 props: ['refreshing'],
 watch: {
  refreshing (newV, oldV) {
   if (newV && !oldV) {
    this.style = 'color: #fff;'
    this.refreshI = setInterval(() => {
     this.rotate += 360
     let animation = wx.createAnimation()
     animation.rotateZ(this.rotate).step()
     this.refreshA = animation.export()
    }, 300)
    return
   }
   if (!newV && oldV) {
    clearInterval(this.refreshI)
    this.refreshA = null
   }
  }
 },
 methods: {
  refresh () {
   if (this.refreshing) return
   this.$emit('refresh')
  },
  refreshend () {
   this.style = 'color: #eee;'
  }
 }
}
</script>

<style lang="stylus" scoped>
</style>

效果

正常效果,看圖中右上角

網(wǎng)速太快

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中watch監(jiān)聽器用法之deep、immediate、flush

    vue中watch監(jiān)聽器用法之deep、immediate、flush

    Vue是可以監(jiān)聽到多層級數(shù)據(jù)改變的,且可以在頁面上做出對應(yīng)展示,下面這篇文章主要給大家介紹了關(guān)于vue中watch監(jiān)聽器用法之deep、immediate、flush的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • uniapp-vue3-彈出選擇組件wo-pop-selector使用示例

    uniapp-vue3-彈出選擇組件wo-pop-selector使用示例

    wo-pop-selector彈出選擇組件采用uniapp-vue3實現(xiàn), 支持H5、微信小程序,本文給大家介紹uniapp-vue3-彈出選擇組件wo-pop-selector及使用示例,感興趣的朋友一起看看吧
    2023-10-10
  • vue 運用mock數(shù)據(jù)的示例代碼

    vue 運用mock數(shù)據(jù)的示例代碼

    本篇文章主要介紹了vue 運用mock數(shù)據(jù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 如何解決vue項目打包后文件過大問題

    如何解決vue項目打包后文件過大問題

    這篇文章主要介紹了如何解決vue項目打包后文件過大問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 深入理解vue輸入框字符限制的優(yōu)化設(shè)計方案

    深入理解vue輸入框字符限制的優(yōu)化設(shè)計方案

    限制輸入框字符是一項需要結(jié)合技術(shù)實現(xiàn)與用戶體驗的綜合設(shè)計,通過實時限制、提交校驗與性能優(yōu)化,開發(fā)者可以高效解決輸入限制問題,同時提升用戶滿意度和數(shù)據(jù)安全性,本文給大家介紹vue輸入框字符限制的優(yōu)化設(shè)計,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • vue2.0在沒有dev-server.js下的本地數(shù)據(jù)配置方法

    vue2.0在沒有dev-server.js下的本地數(shù)據(jù)配置方法

    這篇文章主要介紹了vue2.0在沒有dev-server.js下的本地數(shù)據(jù)配置方法的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • vue 中filter的多種用法

    vue 中filter的多種用法

    這篇文章主要介紹了vue 中filter的多種用法,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2018-04-04
  • 關(guān)閉Vue計算屬性自帶的緩存功能方法

    關(guān)閉Vue計算屬性自帶的緩存功能方法

    下面小編就為大家分享一篇關(guān)閉Vue計算屬性自帶的緩存功能方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解element-ui中el-select的默認(rèn)選擇項問題

    詳解element-ui中el-select的默認(rèn)選擇項問題

    這篇文章主要介紹了詳解element-ui中el-select的默認(rèn)選擇項問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Vue路由傳參頁面刷新后參數(shù)丟失原因和解決辦法

    Vue路由傳參頁面刷新后參數(shù)丟失原因和解決辦法

    這幾天在開發(fā)中遇見的一個關(guān)于路由傳參后,頁面刷新數(shù)據(jù)丟失的問題,下面這篇文章主要給大家介紹了關(guān)于Vue路由傳參頁面刷新后參數(shù)丟失原因和解決辦法,需要的朋友可以參考下
    2022-12-12

最新評論

南和县| 玉龙| 浦东新区| 吴忠市| 睢宁县| 白玉县| 睢宁县| 白银市| 望都县| 双牌县| 涿州市| 古田县| 玛沁县| 南和县| 杭锦后旗| 临泽县| 讷河市| 兖州市| 阜新| 通城县| 宕昌县| 黄浦区| 衡阳县| 梓潼县| 巴青县| 杭锦后旗| 南投市| 循化| 稻城县| 淳化县| 行唐县| 浦县| 封开县| 平江县| 肇州县| 竹溪县| 大同市| 日土县| 麦盖提县| 富蕴县| 宜君县|