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

uniapp自定義頁面跳轉(zhuǎn)loading的實現(xiàn)代碼

 更新時間:2023年06月01日 12:01:20   作者:清和哉  
有些頁面加載起來比較慢,為了加強用戶體驗效果,所以一般都會做一個頁面加載等待的提示,頁面加載完成后消失,下面這篇文章主要給大家介紹了關(guān)于uniapp自定義頁面跳轉(zhuǎn)loading的實現(xiàn)代碼,需要的朋友可以參考下

前言

在開發(fā)uniapp項目時,頁面切換的過程中,經(jīng)常需要添加loading效果以提高用戶體驗。uniapp自帶的loading效果無法自定義,所以想著自己實現(xiàn)一個。

實現(xiàn)思路

  • 封裝一個全局loading組件,放置插槽和loading效果,使用v-if或者v-show去進行切換。
  • 將切換的狀態(tài)isLoading放置在app.vue中的globalData里面來進行狀態(tài)控制
  • 使用uni.$onuni.$emit來完成切換即可

實現(xiàn)代碼

globalData

app.vue

我們需要統(tǒng)一管理頁面切換時的loading狀態(tài),以便在其他頁面中使用。

<script>
export default {
   globalData: {
      loading: false
   }
}
</script>

pageLoading組件實現(xiàn)

src/components/pageLoading/index.vue

在created中監(jiān)聽 pageSwitch 事件, res就是你傳遞的參數(shù),true就是開啟loading效果

<template>
	<view class="container">
            <slot v-if="!loading"></slot>
            <view v-else class="center">
                <!-- loading組件可以自己實現(xiàn), 不想自己寫就找個網(wǎng)站cv一下 -->
                <!-- <loading></loading> -->
                加載中...
            </view>
	</view>
</template>

<script>
export default {
	name: 'pageLoading',
	data() {
            return {
                loading: false
            }
	},
	created() {
            this.loading = getApp().globalData.loading
            
            uni.$on('pageSwitch', res => {
                this.loading = res
                getApp().globalData.loading = res
            })
	}
}
</script>

<style lang="scss" scoped>
.center {
	position: fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	height: 100%;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	background-color: rgba(0, 0, 0, 0.6);
}
</style>

使用

在跳轉(zhuǎn)的時候開啟loading效果,跳轉(zhuǎn)到對應(yīng)頁面之后再去手動關(guān)閉即可,或者是在某個請求完成之后去關(guān)閉

<template>
   <page-loading>
      <button @click="jump">跳轉(zhuǎn)</button>
   </page-loading>
</template>
<script>
// 嫌麻煩注冊個全局組件
import pageLoading from '../../components/pageLoading/index.vue'
export default {
   components: { pageLoading },
   methods: {
      jump() {
         uni.$emit('pageSwitch', true)
         uni.switchTab({
            url: '/pages/my/my'
         })
      }
   }
}
</script>

使用擴展

如果嫌每次跳轉(zhuǎn)都需要手動開啟loading,那就封裝一下uni的跳轉(zhuǎn)函數(shù)或者攔截一下跳轉(zhuǎn),這種方式并不是很推薦,一般是請求完成了加載頁面,建議封裝在請求里面 —— 大概思路就是,每個頁面最主要的數(shù)據(jù)回來了就可以關(guān)閉loading了,又或者是直接寫到頁面里面去等請求執(zhí)行完了關(guān)閉,這個得看實際場景。

攔截跳轉(zhuǎn)實現(xiàn)

const switchTabBarInterceptor = () => {
    uni.addInterceptor('switchTab', {
        success: function (res) {
           uni.$emit('pageSwitch', true)
        },
        complete() {
           uni.$emit('pageSwitch', false)
        }
    })
}
switchTabBarInterceptor()
// 丟main.js 里面就好了..

跳轉(zhuǎn)封裝大概實現(xiàn)

export class Jump {
     tabBarPage = []
    /**
     * Jump類構(gòu)造函數(shù)
     * @param {Array} tabBar - 底部tab欄的頁面列表
     */
    constructor(tabBar) {
        this.tabBarPage = tabBar
    }

    /**
     * 將傳入的參數(shù)轉(zhuǎn)化成URL參數(shù)字符串
     * @param {Object} params - 需要轉(zhuǎn)化的參數(shù)對象
     * @returns {string} - 轉(zhuǎn)化后的URL參數(shù)字符串
     */
    parseParams(params) {
        return Object.entries(params).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&')
    }

    /**
     * 跳轉(zhuǎn)到某一個頁面
     * @param {string} url - 需要跳轉(zhuǎn)的頁面路徑
     * @param {Object} params - 需要傳遞的參數(shù)對象
     */
    push(url, params = {}) {
        const urlWithParams = Object.keys(params).length ? `${url}?${this.parseParams(params)}` : url
        const isTabBarPage = this.tabBarPage.some(page => page === url)

        if (isTabBarPage) {
            // 還是老樣子,在跳轉(zhuǎn)之前開啟loading
            uni.$emit('pageSwitch', true)
            uni.switchTab({ url: urlWithParams })
        }
        else {
            uni.navigateTo({ url: urlWithParams })
        }
    }
}

掛載一手方便使用

/**
 * @typedef {Object} Vue
 * @property {Jump} $jump - 跳轉(zhuǎn)類實例
 */
Vue.prototype.$jump = new Jump(['/pages/index/index', '/pages/my/my'])

請求關(guān)閉loading

在統(tǒng)一管理請求的時候就確定好哪些api是可以關(guān)閉loading的

// request.js
class Http {
    ...
    request(..., closeLoading = false) {
        // ...
        uni.request({
            complete() {
                if(closeLoading) uni.$emit('pageSwitch', false)
            }
        })
        // ...
    }
}

// api.js
const http = new Http()
const fetchOrderList = () => http.request(..., true)

總結(jié)

到此這篇關(guān)于uniapp自定義頁面跳轉(zhuǎn)loading的文章就介紹到這了,更多相關(guān)uniapp自定義頁面跳轉(zhuǎn)loading內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • uni-app自定義組件和通信的方式

    uni-app自定義組件和通信的方式

    組件是 vue 技術(shù)中非常重要的部分,組件使得與ui相關(guān)的輪子可以方便的制造和共享,進而使得vue使用者的開發(fā)效率大幅提升,組件可以使用全局注冊和頁面引入兩種方式進行使用,對uni-app自定義組件和通信相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • return false;和e.preventDefault();的區(qū)別

    return false;和e.preventDefault();的區(qū)別

    Have you ever seen those two things (in the title) being used in jQuery? Here is a simple
    2010-07-07
  • javascript操作select參考代碼

    javascript操作select參考代碼

    用js控制select的方法,大家可以參考下
    2008-06-06
  • 比較搞笑的js陷阱題

    比較搞笑的js陷阱題

    今天看到一段代碼,比較有意思,本周就再多加一問。
    2010-02-02
  • uniapp小程序之配置首頁搜索框功能的實現(xiàn)

    uniapp小程序之配置首頁搜索框功能的實現(xiàn)

    這篇文章主要介紹了uniapp小程序之配置首頁搜索框,我們介紹一下本次開發(fā)使用的是uniapp,本次分享內(nèi)容的搜索框為禁止輸入搜索框,點擊跳轉(zhuǎn)專屬搜索頁面,需要的朋友可以參考下
    2022-09-09
  • 小程序安全指南之如何禁止外部直接跳轉(zhuǎn)到小程序某頁面

    小程序安全指南之如何禁止外部直接跳轉(zhuǎn)到小程序某頁面

    由于小程序跳轉(zhuǎn)的對象比較多,各自的規(guī)則又不一樣,因此小程序跳轉(zhuǎn)外部鏈接是用戶咨詢較多的問題之一,下面這篇文章主要給大家介紹了關(guān)于小程序安全指南之如何禁止外部直接跳轉(zhuǎn)到小程序某頁面的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 詳解ES6中的Map與Set集合

    詳解ES6中的Map與Set集合

    這篇文章主要介紹了詳解ES6中的Map與Set集合,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 關(guān)于js內(nèi)存泄露的一個好例子

    關(guān)于js內(nèi)存泄露的一個好例子

    這篇文章主要介紹了關(guān)于js內(nèi)存泄露的一個好例子。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • canvas繪制的直線動畫

    canvas繪制的直線動畫

    本文主要分享了canvas繪制的直線動畫的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 一次性讓大家搞懂JavaScript數(shù)組方法reduce、every、some

    一次性讓大家搞懂JavaScript數(shù)組方法reduce、every、some

    在JavaScript的數(shù)組工具庫中,every()和some()是處理邏輯判斷的黃金組合,下面這篇文章主要介紹了JavaScript數(shù)組方法reduce、every、some的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07

最新評論

子洲县| 林芝县| 五家渠市| 垫江县| 浦城县| 涞源县| 太康县| 百色市| 淅川县| 漠河县| 长岛县| 盐山县| 清徐县| 壶关县| 建瓯市| 衢州市| 陇川县| 麦盖提县| 怀宁县| 邵阳县| 临邑县| 福贡县| 兴国县| 洮南市| 江源县| 汶川县| 齐齐哈尔市| 永善县| 丹凤县| 昌都县| 黎平县| 崇仁县| 甘泉县| 陆丰市| 临夏市| 英山县| 长乐市| 武平县| 灵璧县| 旬邑县| 名山县|