91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

      手機站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

      千鋒教育

      掃一掃進入千鋒手機站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時隨地免費學(xué)習(xí)課程

      當(dāng)前位置:首頁  >  技術(shù)干貨  > 手把手帶你用vue實現(xiàn)全屏loading插件

      手把手帶你用vue實現(xiàn)全屏loading插件

      來源:千鋒教育
      發(fā)布人:wjy
      時間: 2022-06-06 11:33:00 1654486380

      ## 前言:

      由于我們打開網(wǎng)頁時,瀏覽器與服務(wù)器交互需要時間,受限于寬帶以及服務(wù)器性能,導(dǎo)致用戶在訪問一個網(wǎng)頁時,往往需要一個等待期,才能在瀏覽器中真正完全展示出網(wǎng)頁內(nèi)容。在網(wǎng)頁加載過程中網(wǎng)頁就是一片空白,對于我們用戶而言,我們看到一片空白,還以為網(wǎng)站 "掛掉了",就很憂傷?。?/p>

      手把手帶你用實現(xiàn)vue全屏loading插件

      當(dāng)然了,我們針對這個問題,各大網(wǎng)站都有自己的解決方案。

      有的網(wǎng)站會用骨架屏。

      比如掘金:利用骨架屏,給用戶提醒,網(wǎng)站內(nèi)容馬上呈現(xiàn)給您,不要著急!

      有的網(wǎng)站會選擇在數(shù)據(jù)出來之前 定義一個全屏的loading,提供用于網(wǎng)站正在加載

      比如:網(wǎng)站在加載時以及網(wǎng)站刷新時,會彈出全屏loading。

      ## 文章目的:

      今天我們就要帶大家實現(xiàn),在vue開發(fā)的前后端分離應(yīng)用中,實現(xiàn)在網(wǎng)頁加載以及刷新時,實現(xiàn)如上圖全屏loading的效果!

      ### 功能分析

      vue項目中所有的請求一般都是通過axios,所以我們需要給axios新增請求和響應(yīng)攔截,在請求攔截中顯示loading,和響應(yīng)攔截中關(guān)閉loading。

      所以我們需要定義兩個全局方法,一個是顯示loading,叫$showLoading(),另一個叫$hideLoading()關(guān)閉全屏loading。

      ### 代碼實現(xiàn)

      上面的梳理,我們明確了,需要定義兩個全局方法,一個顯示loading一個關(guān)閉loading,這里我們定義一個Vue的插件通過插件動態(tài)給實例安裝 顯示和關(guān)閉Loading方法。

      - 定義$loading插件,在Vue構(gòu)造函數(shù)原型上添加兩個方法

      以下loading.js代碼

      ```text
      const $loading = {
          install: (Vue) => {
              // 添加 顯示loading方法
              Vue.prototype.$showLoading = () => {
                  console.log('loading顯示')
              }
              // 添加關(guān)閉loading方法
              Vue.prototype.$hideLoading = () => {
                  console.log('loading關(guān)閉')
              }
          }
      }
      export default $loading;
      // 使用時 在main.js入口函數(shù)中引入 使用插件即可安裝
      Vue.use($loading)
      ```

      - 添加axios請求和響應(yīng)攔截,調(diào)用顯示和關(guān)閉loading方法

      ```text
      import Vue from 'vue'
      // 定義Vue實例 調(diào)用全局顯示和關(guān)閉loading方法
      const vm = new Vue()
      // 請求攔截
      axios.interceptors.request.use(function (config) {
        // 在這里調(diào)用 顯示loading方法
          vm.$showLoading()
        return config
      }, function (error) {
          vm.$hideLoading()
        // 在請求出錯調(diào)用 關(guān)閉loading方法
         
        return Promise.reject(error)
      })
      // 響應(yīng)攔截
      axios.interceptors.response.use(function (response) {
        // 在這里調(diào)用 關(guān)閉loading方法
          vm.$hideLoading()
        return response
      }, function (error) {
        // 在這里調(diào)用 關(guān)閉loading方法
          vm.$hideLoading()
        return Promise.reject(error)
      }
      ```

      此時首頁有三次請求,顯示了三次loading顯示和loading關(guān)閉!

      當(dāng)然我們 在數(shù)據(jù)請求不是打印,而是 顯示loading,數(shù)據(jù)過來時應(yīng)該關(guān)閉loading,所以接下來我們實現(xiàn)這兩個效果

      - 通過單文件組件 定義顯示loading結(jié)構(gòu)

      我們目前的問題是,在顯示loading時不是打印而是要顯示全局loading的html結(jié)構(gòu),在關(guān)閉loading時要隱藏!

      為了實現(xiàn)這個需求,我們通過vue的單文件組件來定義loading的html結(jié)構(gòu)和控制loading顯示隱藏

      loading.vue

      ```text
      <template>
       <!--
        mask是loading的背景 v-show控制loading顯示消失
       -->
       <div class="mask" v-show="isShow">       
              <div class="loading"></div>        
          </div>
          </div>
      </template>
      <script>
      export default {
          data () {
              return {
                  // loading默認不顯示
                  isShow: false
              }
          }
      }
      </script>
      <style lang="scss">
       // 定義動畫 控制 loading旋轉(zhuǎn)
      @keyframes rotate {
        0%{
          transform: rotate(0deg);
        }
        100% {
          transform: rotate(360deg);
        }
      }
      .mask{
        position: fixed;
        left:0;
        right:0;
        top:0;
        bottom:0;
        background-color: rgba(0,0,0,.7);
        z-index: 10000;
        display: flex;
        align-items: center;
        justify-content: center;
        .loading{
          width: 30px;
          height: 30px;
          border: 6px solid rgb(219, 140, 13);
          border-radius: 21px;
          border-left-color:transparent;
          animation: rotate 500ms infinite;
        }
      }
      </style>
      ```

      - loading.js中獲取單文件組件 html結(jié)構(gòu) 并在 $showLoading方法調(diào)用時顯示,在$hideLoading時隱藏

      loading.js中

      ```js
      import LoadingVue from './loading.vue'
      const $loading = {
          install: (Vue) => {
              // 通過 Vue.extend方法 獲取LoadingComponent 組件 類
              const LoadingComponent = Vue.extend(LoadingVue);
              // new LoadingComponent得到組件的實例
              const vm = new LoadingComponent();
              // 獲取組件實例的html 并插入到body中
              const tpl = vm.$mount().$el;
              // 插入到body中
              document.body.appendChild(tpl);
              // 添加 顯示loading方法
              Vue.prototype.$showLoading = () => {
                  // 通過改變實例 .mask v-show綁定變量控制顯示
                  vm.isShow = true
              }
              // 添加關(guān)閉loading方法
              Vue.prototype.$hideLoading = () => {
                  // 通過改變實例 .mask v-show綁定變量控制隱藏
                  vm.isShow = false
              }
          }
      }
      ```

      最后在main.js中使用插件 在axios攔截器中控制顯示隱藏就ok啦?。?/p>

      main.js

      ```js
      import Vue from 'vue'
      import loading from './plugins/loading'
      Vue.use(loading)// 構(gòu)造函數(shù)原型上就添加了$showLoading和$hideLoading方法
      ```

      axios攔截器中使用

      ```js
      import Vue from 'vue'
      // 定義Vue實例 調(diào)用全局顯示和關(guān)閉loading方法
      const vm = new Vue()
      // 請求攔截
      axios.interceptors.request.use(function (config) {
        // 在這里調(diào)用 顯示loading方法
          vm.$showLoading()
        return config
      }, function (error) {
          vm.$hideLoading()
        // 在請求出錯調(diào)用 關(guān)閉loading方法

        return Promise.reject(error)
      })
      // 響應(yīng)攔截
      axios.interceptors.response.use(function (response) {
        // 在這里調(diào)用 關(guān)閉loading方法
          vm.$hideLoading()
        return response
      }, function (error) {
        // 在這里調(diào)用 關(guān)閉loading方法
          vm.$hideLoading()
        return Promise.reject(error)
      }
      ```

      是不是很棒,好啦我們的vue全屏loading插件到這里就完成了,小伙伴們回去試一試吧。

      更多關(guān)于web培訓(xùn)的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓(xùn)服務(wù)經(jīng)驗,采用全程面授高品質(zhì)、高體驗培養(yǎng)模式,擁有國內(nèi)一體化教學(xué)管理及學(xué)員服務(wù),助力更多學(xué)員實現(xiàn)高薪夢想。

      tags:
      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      抖音小店照片要求尺寸多大

      在抖音平臺開設(shè)小店已經(jīng)成為了越來越多人的選擇,相信大家已經(jīng)在各大社交平臺上看到有不少小店的推廣。在抖音上,照片是展示產(chǎn)品的重要手段,因...詳情>>

      2023-10-08 16:14:25
      抖音招商團長托管服務(wù)費怎么退回來

      抖音招商團長托管服務(wù)是抖音為有意愿創(chuàng)作內(nèi)容并帶動其他創(chuàng)作者成為團隊成員的用戶提供的一種服務(wù)。通過該服務(wù),招商團長可以自主組建團隊并得到...詳情>>

      2023-10-08 16:08:53
      抖音小店怎么做代銷

      抖音已經(jīng)成為了一個非常受歡迎的短視頻應(yīng)用程序,在其中許多用戶都精心打造了自己的小店,用于銷售各種各樣的商品,獲取額外的收入。然而,要想...詳情>>

      2023-10-08 15:28:41
      怎樣開抖音小店帶貨賺錢

      隨著直播帶貨的火熱,越來越多的人開始嘗試通過抖音小店來開展帶貨業(yè)務(wù)。抖音小店是抖音直播帶貨的配套,可以讓用戶在購買直播中產(chǎn)品時就實現(xiàn)購...詳情>>

      2023-10-08 15:06:36
      能不能幫我打開抖音小店店鋪呢怎么弄

      抖音小店是近年來非常火爆的一個網(wǎng)絡(luò)業(yè)務(wù),也是提供了很多商業(yè)機會的平臺。對于一個創(chuàng)業(yè)者而言,開設(shè)抖音小店是一個不錯的選擇。但是,許多小店...詳情>>

      2023-10-08 15:01:21