麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 小程序 > 正文

小程序自定義單頁面、全局導(dǎo)航欄的實(shí)現(xiàn)代碼

2020-03-21 16:00:38
字體:
供稿:網(wǎng)友

需求

產(chǎn)品說小程序返回到首頁不太方便,想添加返回首頁按鈕,UI說導(dǎo)航欄能不能設(shè)置背景圖片,因?yàn)槟菢釉O(shè)計(jì)挺好看的。

小程序,單頁面,導(dǎo)航欄,代碼

需求分析并制定方案

這產(chǎn)品和UI都提需求了,咱也不能反駁哈,所以開始調(diào)研,分析可行性方案;1、可以添加懸浮按鈕。2、自定義導(dǎo)航欄。
添加懸浮按鈕,是看起來是比較簡單哈,但是感覺不太優(yōu)雅,會占據(jù)頁面的空間,體驗(yàn)也不太好。所以想了下第二種方案,自定義導(dǎo)航欄既可以實(shí)現(xiàn)產(chǎn)品的需求還可以滿足UI的設(shè)計(jì)美感,在頂部空白處加上返回首頁的按鈕,這樣和返回按鈕還對稱(最終如圖所示,頂部導(dǎo)航欄是個(gè)背景圖片,分兩塊組合起來)。

實(shí)現(xiàn)方案

一、實(shí)現(xiàn)的前提

1、首先查看文檔,看文檔里關(guān)于自定義導(dǎo)航欄是怎么規(guī)定的,有哪些限制;還有小程序自定義導(dǎo)航欄全局配置和單頁面配置的微信版本和調(diào)試庫的最低支持版本。

2、在app.json window 增加 navigationStyle:custom ,頂部導(dǎo)航欄就會消失,只保留右上角膠囊狀的按鈕,如何修改膠囊的顏色呢;膠囊體目前只支持黑色和白色兩種顏色 在app.josn window 加上 "navigationBarTextStyle":"white/black"

3、還要考慮加返回按鈕和返回首頁的按鈕,適配不同的機(jī)型

先說下兩種配置方法:

①全局配置navigationStyle:

調(diào)試基礎(chǔ)庫>=1.9.0

微信客戶端>=6.6.0

app.json

{ "usingComponents": {  "navigationBar": "/components/navigationBar/navigationBar" }, "window": {  "navigationStyle": "custom" } }

②單頁面配置navigationStyle

調(diào)試基礎(chǔ)庫>=2.4.3

微信客戶端版本>=7.0.0

自定義的頁面.json

{ "window": {  "navigationStyle": "default" } }{ "navigationStyle": "custom", "usingComponents": {  "navigationBar": "/components/navigationBar/navigationBar" }}
兩者的區(qū)別就是,全局配置放在app.json文件里,單頁面配置放在自定義頁面配置文件里。

二、實(shí)現(xiàn)的步驟

以下說下幾個(gè)要點(diǎn):

1、自定義導(dǎo)航欄文本,是否顯示返回,是否顯示返回首頁,導(dǎo)航欄高度

2、statusBarHeight,用來獲取手機(jī)狀態(tài)欄的高度,這個(gè)需要在全局app.js中的onLaunch,調(diào)用wx.getSystemInfo獲取,navigationBarHeight+默認(rèn)的高度,這個(gè)是設(shè)定整個(gè)導(dǎo)航欄的高度,

3、還有注意的,在寫樣式距離和大小時(shí)建議都用px,因小程序右邊的膠囊也是用的px,不是rpx。

4、因?yàn)樽远x導(dǎo)航欄每個(gè)頁面都要寫,所以把導(dǎo)航欄封裝了公共組件,這樣只需要在每個(gè)頁面引入即可。

如下是封裝的導(dǎo)航欄組件:

wxml

<view class="navbar" style="{{'height: ' + navigationBarHeight}}"> <view style="{{'height: ' + statusBarHeight}}"></view> <view class='title-container'>  <view class='capsule' wx:if="{{ back || home }}">   <view bindtap='back' wx:if="{{back}}">    <image src='/images/back.png'></image>        </view>   <view bindtap='backHome' wx:if="{{home}}">    <image src='/images/home.png'></image>   </view>  </view>  <view class='title'>{{text}}</view> </view></view><view style="{{'height: ' + navigationBarHeight}};background: white;"></view>
這里有個(gè)需注意的問題,就是一般會出現(xiàn)自定義導(dǎo)航欄,下拉頁面,導(dǎo)航欄也隨著會下拉,這種問題是因?yàn)樵O(shè)置fixed后頁面元素整體上移了navigationBarHeight,所以在此組件里設(shè)置一個(gè)空白view元素占用最上面的navigationBarHeight這塊高度

wxss

.navbar { width: 100%; background-color: #1797eb; position: fixed; top: 0; left: 0; z-index: 999;}.title-container { height: 40px; display: flex; align-items: center; position: relative;}.capsule { margin-left: 10px; height: 30px; background: rgba(255, 255, 255, 0.6); border: 1px solid #fff; border-radius: 16px; display: flex; align-items: center;}.capsule > view { width: 45px; height: 60%; position: relative;.capsule > view:nth-child(2) { border-left: 1px solid #fff; }.capsule image { width: 50%; height: 100%; position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%);}.title { color: white; position: absolute; top: 6px; left: 104px; right: 104px; height: 30px; line-height: 30px; font-size: 14px; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}

js

const app = getApp()Component({ properties: {  text: {   type: String,   value: 'Wechat'  },  back: {   type: Boolean,   value: false  },  home: {   type: Boolean,   value: false  } }, data: {  statusBarHeight: app.globalData.statusBarHeight + 'px',  navigationBarHeight: (app.globalData.statusBarHeight + 44) + 'px' }, methods: {  backHome: function () {   let pages = getCurrentPages()   wx.navigateBack({    delta: pages.length   })  },  back: function () {   wx.navigateBack({    delta: 1   })  } }})

json

{ "component": true, "usingComponents": {}}
最終還需要考慮下版本兼容的問題,畢竟還有一些用戶,微信版本并沒有更新到最新版本。

首先可以在app.js里面獲取下當(dāng)前用戶的微信版本,做下版本比較,如果小于這個(gè)版本,設(shè)置個(gè)全局變量,也可以在組件寫個(gè)方法,在不同的頁面打開顯示不同的頂部導(dǎo)航欄,或者可以控制是否顯示導(dǎo)航欄,這里就不詳細(xì)說了。

親自試了下,在低于7.0版本的微信中,如果采用單頁面自定義導(dǎo)航欄,會出現(xiàn)兩個(gè)導(dǎo)航欄,這時(shí)候通過判斷版本號不要再渲染自定義的導(dǎo)航欄組件了,在頁面的配置文件里寫上title名,還有相應(yīng)的背景色,這樣就會顯示自帶的導(dǎo)航欄了。

總結(jié)

小程序開發(fā)是有些坑的地方,從不支持自定義導(dǎo)航欄,到支持全局自定義導(dǎo)航欄,再到現(xiàn)在的支持單頁面配置,可以看出在慢慢完善。還有底部tabbar,可自己選擇配置的太少了,雖然也支持自定義,但是發(fā)現(xiàn)自定義寫的底部導(dǎo)航組件體驗(yàn)并不好,每次打開頁面都會重新渲染底部的按鈕,如果全部寫成在一個(gè)頁面里的tab切換,雖然按鈕每次不用重新加載了,但是業(yè)務(wù)多肯定不行,寫到一個(gè)單頁面里東西也太多了。 希望微信能夠多添加或放開一些功能,讓開發(fā)者更好的服務(wù)于產(chǎn)品,給用戶更好的體驗(yàn)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美成人一级 | 国产精品视频一区二区三区四 | 亚洲网站在线观看 | 国产一区二区三区四区波多野结衣 | 国产免费观看a大片的网站 欧美成人一级 | 激情九九| 日日鲁一鲁视频 | 午夜免费网 | 神马久久蜜桃 | 日本aⅴ在线 | 中文字幕一区二区三区四区 | 精品国产精品久久 | 91短视频在线观看 | 激情久久一区二区 | 免费黄色小视频网站 | 国产91亚洲精品久久久 | 日韩精品免费一区二区三区 | 色阁阁69婷婷 | 国产亚洲精久久久久久蜜臀 | 成人午夜一区 | 91精品国产网站 | 欧美成人精品欧美一级乱黄 | a黄在线观看 | 久久午夜国产 | 久久网日本 | 日韩视频一区二区三区四区 | 日韩字幕 | 成人三级黄色片 | 青青国产在线视频 | 日本搞逼视频 | 青青国产在线视频 | 国产成人小视频在线观看 | 亚洲精品aa | 日本在线国产 | 澳门一级淫片免费视频 | 一级全毛片 | 久久国产精品小视频 | 草人人 | 在线91视频| www.91sese| 亚洲精品成人18久久久久 |