欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信小程序自定義導(dǎo)航欄實(shí)例代碼

 更新時(shí)間:2019年04月05日 10:44:52   作者:快狗打車前端團(tuán)隊(duì)  
這篇文章主要給大家介紹了關(guān)于微信小程序自定義導(dǎo)航欄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用微信小程序具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

背景

在做快狗打車小程序時(shí),關(guān)于默認(rèn)導(dǎo)航欄,我們遇到了以下的問(wèn)題:

  • Android、IOS手機(jī)對(duì)于頁(yè)面title的展示不一致,安卓title的顯示不居中
  • 頁(yè)面的title只支持純文本級(jí)別的樣式控制,不能夠做更豐富的title效果
  • 左上角的事件無(wú)法監(jiān)聽、定制
  • 路由導(dǎo)航單一,只能夠返回上一頁(yè),深層級(jí)頁(yè)面的返回不夠友好

我們希望的是:在各個(gè)機(jī)型頁(yè)面上title一致性 & 個(gè)性化展示、取得左上角點(diǎn)擊事件控制權(quán)及深層級(jí)頁(yè)面的一鍵返回

實(shí)現(xiàn)

step1 自定義

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

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

"navigationStyle": "custom"

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

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

接下來(lái),我們要做的就是實(shí)現(xiàn)一個(gè)導(dǎo)航欄組件,把它放置在頁(yè)面原來(lái)的默認(rèn)導(dǎo)航欄的位置,內(nè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ì)


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

目前快狗打車小程序的基本結(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 

根據(jù)不同的條件,展示不同的內(nèi)容

最終效果

scene 0 常規(guī)首頁(yè)

scene 1 非常規(guī)首頁(yè)

scene 2 嵌套頁(yè)

目前在生產(chǎn)環(huán)境99%的機(jī)型中,都可以完美的運(yùn)行。

寫在最后

  • 自定義導(dǎo)航欄是全局生效的,一旦設(shè)置,各個(gè)原生小程序頁(yè)面都需要引入
  • 目前微信版本7+支持了針對(duì)特定頁(yè)面的自定義導(dǎo)航欄,可以根據(jù)需要個(gè)性化定制
  • 自定義導(dǎo)航欄在web-view頁(yè)面不會(huì)起效
  • 有嘗試把導(dǎo)航欄做成插件,但是遇到在插件組件中無(wú)法獲取頁(yè)面路由棧的問(wèn)題,因此沒(méi)有成功

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 用move.js庫(kù)實(shí)現(xiàn)百葉窗特效

    用move.js庫(kù)實(shí)現(xiàn)百葉窗特效

    本文主要介紹了用move.js庫(kù)實(shí)現(xiàn)百葉窗特效的思路與方法。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • 微信小程序?qū)崿F(xiàn)簡(jiǎn)易的計(jì)算器功能

    微信小程序?qū)崿F(xiàn)簡(jiǎn)易的計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)易的計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 在javascript中執(zhí)行任意html代碼的方法示例解讀

    在javascript中執(zhí)行任意html代碼的方法示例解讀

    關(guān)于javascript的eval()函數(shù)無(wú)法執(zhí)行html代碼的問(wèn)題,下面為大家介紹下一種在javascript中執(zhí)行任意html代碼的方法,感興趣的朋友不要錯(cuò)過(guò)
    2013-12-12
  • JS 中document.URL 和 windows.location.href 的區(qū)別

    JS 中document.URL 和 windows.location.href 的區(qū)別

    實(shí)際上,document 和 windows 這兩個(gè)對(duì)象的區(qū)別已經(jīng)包含了這個(gè)問(wèn)題的答案。
    2009-11-11
  • javascript dom操作之cloneNode文本節(jié)點(diǎn)克隆使用技巧

    javascript dom操作之cloneNode文本節(jié)點(diǎn)克隆使用技巧

    文本克隆函數(shù)cloneNode他有兩個(gè)參數(shù)——true or false
    2009-12-12
  • uniapp?H5遮罩層、彈窗以及蒙層滾動(dòng)穿透/滑動(dòng)穿透解決辦法

    uniapp?H5遮罩層、彈窗以及蒙層滾動(dòng)穿透/滑動(dòng)穿透解決辦法

    最近用uin-app做項(xiàng)目遇到了不少問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于uniapp?H5遮罩層、彈窗以及蒙層滾動(dòng)穿透/滑動(dòng)穿透的解決辦法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • js實(shí)現(xiàn)全選和全不選

    js實(shí)現(xiàn)全選和全不選

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)全選和全不選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 使用Electron自制錄屏軟件

    使用Electron自制錄屏軟件

    錄屏軟件對(duì)于我們來(lái)說(shuō)都不陌生了,本文我們要做的事情是實(shí)現(xiàn)自己的錄屏軟件,載體使用Electron,因?yàn)樗m合錄制桌面的場(chǎng)景,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2024-01-01
  • 原生js jquery ajax請(qǐng)求以及jsonp的調(diào)用方法

    原生js jquery ajax請(qǐng)求以及jsonp的調(diào)用方法

    下面小編就為大家?guī)?lái)一篇原生js jquery ajax請(qǐng)求以及jsonp的調(diào)用方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 5分鐘快速看懂ES6中的反射與代理

    5分鐘快速看懂ES6中的反射與代理

    這篇文章主要給大家介紹了如何通過(guò)5分鐘快速看懂ES6中的反射與代理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ES6具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論