溫馨提示×

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

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

微信小程序系列之如何實(shí)現(xiàn)自定義頂部導(dǎo)航功能

發(fā)布時(shí)間:2021-07-09 14:04:54 來(lái)源:億速云 閱讀:122 作者:小新 欄目:web開(kāi)發(fā)

這篇文章主要為大家展示了“微信小程序系列之如何實(shí)現(xiàn)自定義頂部導(dǎo)航功能”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“微信小程序系列之如何實(shí)現(xiàn)自定義頂部導(dǎo)航功能”這篇文章吧。

具備基礎(chǔ)

vue框架

mpvue框架

全局配置

?找到全局的app.json文件,在配置中添加如下內(nèi)容:

"navigationStyle": "custom"
"window": {
 "backgroundTextStyle": "light",
 "navigationBarBackgroundColor": "#fff",
 "navigationBarTitleText": "WeChat",
 "navigationBarTextStyle": "black",
 "navigationStyle": "custom" // 這個(gè)配置
}

組件思維

?使用mpvue開(kāi)發(fā)小程序,src目錄下默認(rèn)會(huì)生成一個(gè)components文件夾;
?由于自定義組件所有webview頁(yè)面都要使用,所以把它歸類(lèi)為公共組件;
?可以在components文件夾下新建一個(gè)common文件夾,專(zhuān)門(mén)放置公共組件,如下:

├── src                    源碼目錄 
│  ├── main.js             入口js文件
│  ├── app.json            全局配置
│  ├── components          組件目錄
│  │  └── common           公共組件
          └── topBar.vue   頂部自定義導(dǎo)航復(fù)制代碼

組件內(nèi)容

?由于不同設(shè)備statusBarHeight值可能有差異,自定義組件的高度取決于statusBarHeight值;
?找到全局App.vue文件,在這里面執(zhí)行小程序的onLaunch生命周期(監(jiān)聽(tīng)小程序初始化);
?具體獲取方法如下:

const that = this
let systemInfo = wx.getSystemInfoSync()
that.setBarHeight(systemInfo.statusBarHeight)

? 通過(guò)vuex存儲(chǔ)statusBarHeight值,不清楚vuex如何在小程序中使用的可參考mpvue如何使用vuex;
?.vue文件的html相關(guān)結(jié)構(gòu)如下:

<template>
 <div class="top-bar">
 <div class="bar" :>
  <span class="title">{{title}}</span>
  <button v-if="way && way==='/pages/mine/main'" open-type="getUserInfo" @getuserinfo="toMine">
  <image class="icon" :src="icon" />
  </button>
  <image v-else-if="way && way!=='/pages/mine/main'" class="icon-back" :src="icon" @tap="toPage(way)" />
  <span v-else></span>
 </div>
 <p class="place-holder" :></p>
 </div>
</template>

?結(jié)構(gòu)分析如下,可看做兩部分,一部分是fixed定位在頂部的class="bar"的div;另一部分是class="place-holder"的p;
?之所以要放一個(gè)p標(biāo)簽,是因?yàn)椴挥妹看我雝opBar.vue時(shí)都要考慮class="bar"的div都會(huì)遮擋內(nèi)容區(qū)的問(wèn)題;
?因此將p標(biāo)簽height:80rpx;加上padding-top的6px;正好等于class="bar"的div的高度;

微信小程序系列之如何實(shí)現(xiàn)自定義頂部導(dǎo)航功能 

微信小程序系列之如何實(shí)現(xiàn)自定義頂部導(dǎo)航功能 

?由于項(xiàng)目中左邊放置的是進(jìn)入個(gè)人中心的功能,所以左邊頭像必須使用button來(lái)出發(fā)獲取用戶(hù)信息的授權(quán);
?同時(shí)需要考慮到左邊不是頭像的情況,這時(shí)就可以用到vue的props屬性,具體props值,看下面代碼,默認(rèn)是給向左的箭頭,表示返回上一頁(yè);

props: {
 title: {
 type: String,
 required: true
 },
 icon: {
 type: String,
 default: require('@static/icon/icon_back.png')
 },
 way: {
 type: String,
 default: null
 }
}

?如果way啥也不傳則左側(cè)不顯示任何icon;
?如果way傳入的是進(jìn)入個(gè)人中心的路由,則走button結(jié)構(gòu)上面的事件;
?如果way傳入的是‘back',則顯示返回的向左箭頭。

問(wèn)題總結(jié)

?該公共topBar.vue組件對(duì)ipad不能有效適配;
?fixed定位在安卓手機(jī)上下拉刷新時(shí),結(jié)構(gòu)會(huì)跟著下拉,例如本文的自定義導(dǎo)航,下拉刷新的時(shí)候?qū)Ш綍?huì)跟著下拉然后再fixed到頂部(開(kāi)發(fā)者工具上沒(méi)問(wèn)題,真機(jī)有問(wèn)題);

以上是“微信小程序系列之如何實(shí)現(xiàn)自定義頂部導(dǎo)航功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(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