詳解mpvue中小程序自定義導(dǎo)航組件開發(fā)指南
這篇筆記主要記錄一下基于mpvue的小程序中實(shí)現(xiàn)自定義導(dǎo)航的思路及應(yīng)用。分享出來拋磚引玉,如有謬誤或優(yōu)化空間,歡迎交流。
小程序的配置項(xiàng)navigationStyle設(shè)置為custom之后,導(dǎo)航欄只保留右上角膠囊按鈕,顏色、標(biāo)題文字內(nèi)容均可以自定義,可以此實(shí)現(xiàn)導(dǎo)航欄的個(gè)性化需求,實(shí)際應(yīng)用如沉浸式視頻播放頁(yè)等。

小程序7.0.0之后的版本開始支持自定義單個(gè)頁(yè)面的導(dǎo)航欄,將頁(yè)面的navigationStyle設(shè)置為custom即可。mpvue的配置方式如下:

由于不同操作系統(tǒng)、不同機(jī)型的導(dǎo)航欄高度是不同的,所以自定義導(dǎo)航欄核心要解決的問題是不同機(jī)型中導(dǎo)航欄高度的兼容問題。

如上圖所示,導(dǎo)航欄一共由兩部分組成:狀態(tài)欄和標(biāo)題欄。狀態(tài)欄就是用來展示時(shí)間、網(wǎng)絡(luò)狀態(tài)的那一欄,全面屏(劉海屏幕)的機(jī)型中狀態(tài)欄會(huì)比其他屏幕高很多:ios系統(tǒng)帶劉海屏的都是44,其他都為20,包括pad。 而安卓機(jī)的數(shù)值則更多。我們可以通過微信的apiwx.getSystemInfo獲取狀態(tài)欄的高度(statusBarHeight)。而標(biāo)題欄高度不能通過小程序api獲取到,通過同級(jí)多個(gè)機(jī)型的測(cè)試數(shù)據(jù),我們基本可以按照ios中44px安卓中48px來算。
這樣一來就好辦了,通過statusBarHeight獲取到狀態(tài)欄高度后,再判斷當(dāng)前的系統(tǒng)加上對(duì)應(yīng)的標(biāo)題欄后,就可以獲取到正確的導(dǎo)航欄高度了。
template中的html代:(因?yàn)樾〕绦蛑械膙ideo組件有著最高的層級(jí),是不會(huì)被普通html標(biāo)簽覆蓋的,所以導(dǎo)航欄組件中全部采用了<cover-view>標(biāo)簽。):
<template>
<div class="comp-navbar">
<!-- 占位欄 -->
<cover-view class="placeholder-bar" :style="{height: navBarHeight + 'px'}"> </cover-view>
<!-- 導(dǎo)航欄主體 -->
<cover-view class="navbar" :style="{height: navBarHeight + 'px',backgroundColor:navBackgroundColor}">
<!-- 狀態(tài)欄 -->
<cover-view class="nav-statusbar" :style="{height: statusBarHeight + 'px'}"></cover-view>
<!-- 標(biāo)題欄 -->
<cover-view class="nav-titlebar" :style="{height: titleBarHeight + 'px' }">
<!-- home及后退鍵 -->
<cover-view class="bar-options">
<cover-view v-if="backVisible" class="opt opt-back" @click="backClick()">
<cover-image class="back-image" src="/static/images/back.png"></cover-image>
</cover-view>
<cover-view class="line" v-if="backVisible && homePath"></cover-view>
<cover-view v-if="homePath" class="opt opt-home" @click="homeClick()">
<cover-image class="home-image" src="/static/images/home.png"></cover-image>
</cover-view>
</cover-view>
<!-- 標(biāo)題 -->
<cover-view class="bar-title" :style="[{color:titleColor}]">{{title}}</cover-view>
</cover-view>
</cover-view>
</div>
</template>
js代碼:
beforeMount() {
const self = this;
wx.getSystemInfo({
success(system) {
console.log(`system:`, system);
self.statusBarHeight = system.statusBarHeight;
self.platform = system.platform;
let platformReg = /ios/i;
if (platformReg.test(system.platform)) {
self.titleBarHeight = 44;
} else {
self.titleBarHeight = 48;
}
self.navBarHeight = self.statusBarHeight + self.titleBarHeight;
}
});
},
自定義導(dǎo)航欄的可自定義內(nèi)容:標(biāo)題文字、文字顏色、標(biāo)題欄背景色、回退按鈕是否顯示、home按鈕的地址。示例代碼如下:
<navigation-bar :title="videoTitle" :navBackgroundColor="'pink'" :titleColor="'green'" :back-visible="true" :home-path="'/pages/index/main'"></navigation-bar>
最后奉上github地址,歡迎檢閱代碼,歡迎star。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼
這篇文章主要介紹了vue+express 構(gòu)建后臺(tái)管理系統(tǒng)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
vue前端頁(yè)面數(shù)據(jù)加載添加loading效果的實(shí)現(xiàn)
這篇文章主要介紹了vue前端頁(yè)面數(shù)據(jù)加載添加loading效果的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
vue.js 實(shí)現(xiàn)點(diǎn)擊展開收起動(dòng)畫效果
這篇文章主要介紹了vue.js 實(shí)現(xiàn)點(diǎn)擊展開收起動(dòng)畫效果,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
淺談vue中使用圖片懶加載vue-lazyload插件詳細(xì)指南
本篇文章主要介紹了淺談vue中使用圖片懶加載vue-lazyload插件詳細(xì)指南,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-10-10
Vue?Electron實(shí)現(xiàn)輸入法自動(dòng)刷字?jǐn)?shù)功能詳解
這篇文章主要介紹了Vue?Electron實(shí)現(xiàn)輸入法自動(dòng)刷字?jǐn)?shù)功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12
SpringBoot+Vue項(xiàng)目線上買菜系統(tǒng)源碼展示
本線上買菜系統(tǒng)采用的數(shù)據(jù)庫(kù)是Mysql,使用springboot框架開發(fā)。在設(shè)計(jì)過程中,充分保證了系統(tǒng)代碼的良好可讀性、實(shí)用性、易擴(kuò)展性、通用性、便于后期維護(hù)、操作方便以及頁(yè)面簡(jiǎn)潔等特點(diǎn),需要的朋友可以參考下2022-08-08
Vue3中reactive函數(shù)toRef函數(shù)ref函數(shù)簡(jiǎn)介
這篇文章主要介紹了Vue3中的三種函數(shù),分別對(duì)reactive函數(shù)toRef函數(shù)以及ref函數(shù)原理及使用作了簡(jiǎn)單介紹,有需要的朋友可以借鑒參考下2021-09-09

