首頁  >  文章  >  web前端  >  uniapp如何全域自訂加載

uniapp如何全域自訂加載

WBOY
WBOY原創
2023-05-22 09:54:082976瀏覽

隨著行動互聯網的快速發展,行動應用已成為人們生活中不可或缺的一部分。而在行動應用開發中,載入動畫就顯得格外重要,它可以明顯提升使用者體驗,讓使用者更快感知到應用程式的回饋。而本文將介紹如何利用uniapp實現全域自訂載入動畫,提升使用者體驗。

一、為什麼需要自訂載入動畫

在一個應用程式中,載入動畫是非常常見的一種回饋方式,一般分為兩種情況:

  1. 與後台互動等待:例如在請求後台介面時需要等待一定的時間,這時我們一般需要一個載入動畫來提示使用者正在載入。
  2. 初始載入時間過長:例如一個應用程式開啟時,需要等待應用程式的初始載入,這時我們也需要一個載入動畫來提示使用者應用程式正在載入。

但是對於預設樣式的載入動畫,往往無法滿足我們的需求,往往需要自訂樣式和動畫來提升使用者體驗。因此,我們需要全域自訂載入動畫。

二、實作方案

在uniapp中,可以透過在App.vue中實作一個Loading元件來實現全域自訂載入動畫,其原理就是透過父子元件之間的通信,實作全域載入動畫的顯示和隱藏。

  1. 建立Loading元件

在src/components資料夾下,建立一個Loading資料夾,然後在其內部建立一個Loading.vue文件,用於展示自定義的載入動畫效果。

程式碼如下:

<template>
  <div v-show="isShow" class="loading">
    <img src="@/static/loading.gif" alt="loading" />
  </div>
</template>

<script>
  export default {
    props: {
      isShow: {
        type: Boolean,
        default: false
      }
    }
  }
</script>

<style>
  .loading {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    background: rgba(0, 0, 0, 0.3);
    z-index: 999;
  }

  img {
    width: 60px;
    height: 60px;
  }
</style>

在上述程式碼中,我們建立了一個div,並設定了其樣式用於顯示loading動畫。 isShow屬性透過props傳遞進來,用來判斷是否需要展示載入動畫。

  1. 在App.vue中引入Loading元件

在App.vue中,我們需要引入Loading元件,並透過v-show控制其顯示和隱藏。

程式碼如下:

<template>
  <div>
    <Loading :isShow="isLoading" />
    <router-view />
  </div>
</template>

<script>
import Loading from '@/components/Loading/Loading'

export default {
  components: {
    Loading
  },

  data() {
    return {
      isLoading: false
    }
  },

  methods: {
    startLoading() {
      this.isLoading = true
    },

    endLoading() {
      this.isLoading = false
    }
  },

  mounted() {
    this.$bus.$on('startLoading', this.startLoading)
    this.$bus.$on('endLoading', this.endLoading)
  },

  beforeDestroy() {
    this.$bus.$off('startLoading', this.startLoading)
    this.$bus.$off('endLoading', this.endLoading)
  }
}
</script>

我們在App.vue中引入了Loading元件,並透過v-show控制其顯示和隱藏。同時,我們在data中設定了isLoading變數來控制Loading元件的顯示。

在mounted生命週期中,透過$bus.$on監聽名為startLoading和endLoading的事件,這兩個事件是我們在需要使用載入動畫的位置觸發的,用於通知父元件顯示或隱藏Loading組件。在beforeDestroy生命週期中透過$bus.$off移除監聽函數,避免記憶體洩漏。

  1. 在需要使用載入動畫的地方觸發startLoading和endLoading事件

在需要使用載入動畫的地方,我們透過$bus.$emit觸發startLoading和endLoading事件,通知App.vue中的Loading元件顯示和隱藏。

例如,在一個非同步請求中:

import axios from 'axios'

export default {
  methods: {
    async fetchData() {
      try {
        this.$bus.$emit('startLoading') // 触发startLoading事件,显示Loading组件
        const response = await axios.get('/api/data') // 这里是异步请求数据
        console.log(response.data)
      } catch (error) {
        console.error(error)
      } finally {
        this.$bus.$emit('endLoading') // 触发endLoading事件,隐藏Loading组件
      }
    }
  }
}

在上述程式碼中,我們在非同步請求資料前透過$bus.$emit觸發了startLoading事件,用於顯示Loading元件,請求結束後再觸發endLoading事件,用於隱藏Loading元件。

透過上述三個步驟,我們就可以實作一個簡單的全域自訂載入動畫了。

三、總結

在行動應用開發中,載入動畫是非常重要的回饋機制。而在uniapp中,透過自訂全域Loading元件,我們可以很方便地實現自訂載入動畫,提升使用者體驗。

本文主要透過三個步驟實現了全域自訂載入動畫,首先建立了Loading元件,用於展示自訂的載入動畫效果,然後在App.vue中引入Loading元件,透過v-show控制其顯示和隱藏,最後在需要使用載入動畫的地方觸發startLoading和endLoading事件,用於通知App.vue中的Loading元件顯示或隱藏。

以上是uniapp如何全域自訂加載的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:uniapp去掉捲軸下一篇:uniapp去掉捲軸