亚洲视频二区I天堂网av 在线I丰满人妻AV一区二区三I088精品在线观看视频IAV在线网站免费I亚洲人成影院在线I91精品91久久久777777I131M久I日日摸日日

027-81331413

微信小程序自定義單頁面、全局導(dǎo)航欄

發(fā)布時間:2021-03-27 瀏覽:4169

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

需求分析并制定方案

這產(chǎn)品和UI都提需求了,咱也不能反駁哈,所以開始調(diào)研,分析可行性方案:

  1. 可以添加懸浮按鈕

  2. 自定義導(dǎo)航欄

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

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

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

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

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

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

先說下兩種配置方法:

1、全局配置navigationStyle

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

  • 微信客戶端>=6.6.0

app.json:

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


2、單頁面配置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)的步驟

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

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

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

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

4、因為自定義導(dǎo)航欄每個頁面都要寫,所以把導(dǎo)航欄封裝了公共組件,這樣只需要在每個頁面引入即可。

如下是封裝的導(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>


這里有個需注意的問題,就是一般會出現(xiàn)自定義導(dǎo)航欄,下拉頁面,導(dǎo)航欄也隨著會下拉,這種問題是因為設(shè)置 fixed 后頁面元素整體上移了 navigationBarHeight,所以在此組件里設(shè)置一個空白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)前用戶的微信版本,做下版本比較,如果小于這個版本,設(shè)置個全局變量,也可以在組件寫個方法,在不同的頁面打開顯示不同的頂部導(dǎo)航欄,或者可以控制是否顯示導(dǎo)航欄,這里就不詳細(xì)說了。

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

總結(jié)

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


主站蜘蛛池模板: 国产亚洲精品久久久久秋 | 欧美午夜视频在线 | 亚洲一区精品视频在线观看 | 成人国产精品秘片多多 | 免费看网站在线观 | 国内精品自线一区二区三区2021 | 亚洲制服另类无码专区 | 在线播放亚洲人成电影 | 亚洲午夜无码久久 | 国产午夜亚洲精品不卡在线观看 | 区二区三区玖玖玖 | 国产人妻人伦精品欧美 | 在线中文字幕乱码英文字幕正常 | 麻豆网 | 日本精品久久久久中文字幕乱中年 | 亚洲成av人片一区二区 | 在线xxxx| 少妇裸体淫交视频免费看 | 99激情| 欧美在线精彩视频免费播放 | 色网站免费在线观看 | 日韩精品亚洲人成在线 | 肉大捧一进一出免费视频 | 欧美综合视频在线观看 | 国产极品探花一区二区三区 | www亚洲视频 | 久久久久久久久女人体 | 国产成人无码激情视频 | 欧美日韩精品一区二区在线观看 | 亚洲成av人片在线观看香蕉 | 国产成人综合亚洲看片 | 舌吻激情大尺度做爰视频 | 欧美极品少妇性运交 | 国产av偷闻女邻居内裤被发现 | 黄色免费在线网站 | 亚洲免费天堂 | 妩媚尤物娇喘无力呻吟在线视频 | 亚洲精品无码mv在线观看 | 好了av在线第四站综合网站 | 久草网在线观看 | 日韩欧美xxx | 国产男女在线观看 | 丰满妇女强制高潮18xxxx | sodjav成人网 | 老司机久久一区二区三区 | 国产午夜鲁丝片av无码免费 | 91成人精品一区在线播放 | 被技师按摩到高潮的少妇 | 色欧美与xxxxx| 国产精品特黄aaaa片在线观看 | 我的好妈妈在线观看 | 国产高潮抽搐喷水高清 | 久久久福利 | 亚洲综合图区 | 91一起草| 亚洲成人福利在线 | av在线www | 亚洲熟妇av一区二区三区漫画 | 中国一级大黄大黄大色毛片 | 91精品国产闺蜜国产在线闺蜜 | 伊人色综合一区二区三区影院视频 | 国产精品自在拍首页视频 | 欧美大尺度床戏做爰 | 亚洲人成影院在线无码按摩店 | 久久人人爽天天玩人人妻精品 | 性色蜜桃臀x88av天美传媒 | 超清无码av最大网站 | 粉嫩粉嫩的虎白女18在线软件 | 黄色日b片| 欧洲精品码一区二区三区免费看 | 成人免费在线小视频 | 毛片毛片毛片毛片毛片毛片 | 草草草在线观看 | 嫩草精品福利视频在线观看 | 在线中文字幕播放 | 又大又硬又爽免费视频 | 国产精品女上位好爽在线 | 青娱乐久久 | 天天操夜夜操视频 | 自拍偷在线精品自拍偷99九色 | 香蕉视频在线免费看 | 少妇下面好紧好多水真爽播放 | 九九九在线 | 久久99精品久久久秒播 | 免费一级做a爰片性视频 | 精品午夜福利在线视在亚洲 | 久久久国产精品一区二区三区 | 欧美另类一区二区 | 中文字幕日韩一区二区三区不卡 | 久久97超碰色中文字幕蜜芽 | 91com在线观看 | 香蕉狠狠爱视频 | av十大美巨乳 | 怡红院一区二区 | 国产成人精品一区二三区在线观看 | 大sao货你好浪好爽好舒服视频 | 国产有奶水哺乳期无码avav | youjizz少妇| 免费无码一区二区三区a片百度 |