国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質的職業(yè)教育機構

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

            領取全套視頻
            千鋒教育

            關注千鋒學習站小程序
            隨時隨地免費學習課程

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

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

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

            ## 前言:

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

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

            當然了,我們針對這個問題,各大網(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ā)的前后端分離應用中,實現(xiàn)在網(wǎng)頁加載以及刷新時,實現(xiàn)如上圖全屏loading的效果!

            ### 功能分析

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

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

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

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

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

            以下loading.js代碼

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

            - 添加axios請求和響應攔截,調用顯示和關閉loading方法

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

            此時首頁有三次請求,顯示了三次loading顯示和loading關閉!

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

            - 通過單文件組件 定義顯示loading結構

            我們目前的問題是,在顯示loading時不是打印而是要顯示全局loading的html結構,在關閉loading時要隱藏!

            為了實現(xiàn)這個需求,我們通過vue的單文件組件來定義loading的html結構和控制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旋轉
            @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結構 并在 $showLoading方法調用時顯示,在$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
                    }
                    // 添加關閉loading方法
                    Vue.prototype.$hideLoading = () => {
                        // 通過改變實例 .mask v-show綁定變量控制隱藏
                        vm.isShow = false
                    }
                }
            }
            ```

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

            main.js

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

            axios攔截器中使用

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

              return Promise.reject(error)
            })
            // 響應攔截
            axios.interceptors.response.use(function (response) {
              // 在這里調用 關閉loading方法
                vm.$hideLoading()
              return response
            }, function (error) {
              // 在這里調用 關閉loading方法
                vm.$hideLoading()
              return Promise.reject(error)
            }
            ```

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

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

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

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

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

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

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

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

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

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

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

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

            2023-10-08 15:01:21