溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微信小程序中怎么自定義導(dǎo)航欄

發(fā)布時(shí)間:2021-06-17 15:50:06 來(lái)源:億速云 閱讀:192 作者:Leah 欄目:web開(kāi)發(fā)

本篇文章給大家分享的是有關(guān)微信小程序中怎么自定義導(dǎo)航欄,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

step1 自定義

第一步 取得導(dǎo)航欄的控制權(quán)

小程序支持自定義導(dǎo)航欄,只需要在app.json文件中,window項(xiàng)中配置

"navigationStyle": "custom"

這樣微信就放開(kāi)了導(dǎo)航欄的控制權(quán),只保留右上角的膠囊。

頁(yè)面會(huì)從視窗的頂部開(kāi)始渲染,如圖

微信小程序中怎么自定義導(dǎo)航欄

接下來(lái),我們要做的就是實(shí)現(xiàn)一個(gè)導(dǎo)航欄組件,把它放置在頁(yè)面原來(lái)的默認(rèn)導(dǎo)航欄的位置,內(nèi)容什么的完全由開(kāi)發(fā)者自己定制。

step2 功能點(diǎn)

第二步 梳理導(dǎo)航欄的功能點(diǎn)

  • 導(dǎo)航欄高度(各個(gè)機(jī)型動(dòng)態(tài)適配)

  • 導(dǎo)航欄內(nèi)容定制

    • 所有機(jī)型title居中顯示(自己布局實(shí)現(xiàn))

    • 首頁(yè)導(dǎo)航欄左上角顯示個(gè)人中心、中部title使用個(gè)性圖標(biāo)

    • 嵌套頁(yè)面左上角顯示返回上一頁(yè) + 回到首頁(yè)按鈕

    • 非常規(guī)首頁(yè)左上角顯示回到首頁(yè)按鈕

導(dǎo)航欄高度 包含兩個(gè)部分:工具欄和title欄, 工具欄的高度一般是固定的20px,title欄的高度需要計(jì)算

導(dǎo)航欄內(nèi)容的定制,需要識(shí)別當(dāng)前頁(yè)面的性質(zhì),根據(jù)不同的頁(yè)面展示不同的內(nèi)容,可以通過(guò)獲取當(dāng)前的頁(yè)面路由棧來(lái)判定當(dāng)前的頁(yè)面性質(zhì)

微信小程序中怎么自定義導(dǎo)航欄

step3 導(dǎo)航欄組件基本結(jié)構(gòu)

目前快狗打車(chē)小程序的基本結(jié)構(gòu)

// navBar.wxml
<cover-view class='place-holder'></cover-view>
<cover-view class='nav-bar'>
 <cover-view class='tool-bar' style='height: 20px'></cover-view>
 <cover-view class='title-bar'>
  <cover-view class='left-cell'>
   // scene0 常規(guī)首頁(yè) 個(gè)人中心按鈕
   // scene1 非常規(guī)首頁(yè) 回首頁(yè)按鈕
   // scene2 嵌套頁(yè)  返回上一頁(yè)按鈕 + 回首頁(yè)按鈕
  </cover-view>
  <cover-view class='center-cell'>
   // scene0 常規(guī)首頁(yè) 個(gè)性化title
   // scene1 其他頁(yè) 正常title
  </cover-view>
  <cover-view class='right-cell'>
   // 占位用的
  </cover-view>
 </cover-view>
</cover-view>

Tips:

組件內(nèi)多了一個(gè)占位的place-holder塊,是因?yàn)槟承╉?yè)面有類似滾動(dòng)列表的需求,要保證導(dǎo)航欄始終在視窗的頂部的話,需要使用定位,定位之后脫離文檔流,在最初的時(shí)候需要占位塊保證后續(xù)的頁(yè)面內(nèi)容不會(huì)被導(dǎo)航欄遮擋

使用cover-view布局是因?yàn)榭旃返臉I(yè)務(wù)中有類似map的原生組件,使用view的話有被遮擋的風(fēng)險(xiǎn)

step4 高度計(jì)算

需要計(jì)算title-bar的高度

在 默認(rèn)導(dǎo)航欄 & 無(wú)底部tab欄 的情況下,使用wx.getSystemInfoSync獲取手機(jī)信息,可以看到兩項(xiàng)信息:

  • screenHeight 屏幕高度,單位px

  • windowHeight 可使用窗口高度,單位px

這種情況下,二者的差值就是默認(rèn)的導(dǎo)航欄的高度, 但是在設(shè)置了"navigationStyle": "custom"之后,二者的值是一樣的了,因此導(dǎo)航欄的高度我們需要使用統(tǒng)計(jì)的經(jīng)驗(yàn)值。

根據(jù)統(tǒng)計(jì),得到如下的結(jié)果:

{
 'iPhone': 64,
 'iPhoneX': 88,
 'Android': 68,
 'samsung': 72
}

工具欄的高度可根據(jù)wx.getSystemInfoSync返回值中的statusBarHeight獲取。

至此,我們得到了導(dǎo)航欄的相關(guān)的高度值

// 導(dǎo)航欄總高度 & 占位塊高度
placeHoder = totalBar = {
 'iPhone': 64,
 'iPhoneX': 88,
 'Android': 68,
 'samsung': 72
}
// 時(shí)間、信號(hào)等工具欄的高度
toolBar = systermInfo.statusBarHeight
// 頁(yè)面title欄的高度
titleBar = totalBar - toolBar

step5 內(nèi)容定制

在組件的生命周期函數(shù)attached中,我們可以獲取當(dāng)前的頁(yè)面路由棧

let pages = getCurrentPages()
let current_page = pages[pages.length - 1].route 
const NORMAL_ENTRY = '常規(guī)的入口頁(yè)路徑'

// scene 0 常規(guī)入口頁(yè) 個(gè)性化title、個(gè)人中心
pages.length === 1 && current_page === NORMAL_ENTRY
// scene 1 非常規(guī)入口頁(yè) 回首頁(yè)
pages.length === 1 && current_page !== NORMAL_ENTRY
// scene 2 嵌套頁(yè)面 返回 + 回首頁(yè)
pages.length > 1

以上就是微信小程序中怎么自定義導(dǎo)航欄,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI