您好,登錄后才能下訂單哦!
前言
微信小程序憑借著“不占內(nèi)存,即用即走”等特點,加上微信的社交的屬性,其用戶量一路保持快速的增長。對其的應用要求也日漸增高,使用更多樣化、個性化。其中,對頂部導航的自定義實現(xiàn),因交互功能成了一個普遍需要實現(xiàn)的組件,而尤因其不同設(shè)備下樣式的兼容問題 如何更優(yōu)雅的實現(xiàn) 使其成為大家討論的熱點。
下面我們從對其的設(shè)計、實現(xiàn)、使用上進行詳細闡述,讓大家更加了解這個組件。原創(chuàng)文章,若有寫的不妥之處,歡迎大家指出更正。
自定義導航的設(shè)計
界面設(shè)計
目前,大多小程序?qū)ψ远x導航的設(shè)計是:標題居中;左側(cè)膠囊包裹返回上一頁按鈕和到首頁按鈕,要和右側(cè)系統(tǒng)默認膠囊樣式布局一致。效果如下:
功能設(shè)計
主要功能如下:
詳細實現(xiàn)
布局樣式實現(xiàn)
這個組件的實現(xiàn)的主要的重點在于不同設(shè)備上的樣式兼容。由于右側(cè)膠囊在不同設(shè)備下的表現(xiàn)是不一樣的,所以左側(cè)膠囊的布局樣式要隨不同設(shè)備進行自適應,既左側(cè)膠囊的高度間距等樣式數(shù)據(jù)要先計算出來再賦予其值。故難點就在于如何獲得這些值。經(jīng)過一番針對個別手機的兼容踩坑操作(此處省略一萬字...😢),最終得到正解(此處感謝小伙伴的雪中送炭🙏),那就是可以一勞永逸的wx.getMenuButtonBoundingClientRect()
wx.getMenuButtonBoundingClientRect()
獲取菜單按鈕(右上角膠囊按鈕)的布局位置信息。坐標信息以屏幕左上角為原點。
菜單按鈕的布局位置信息:
width 寬度(px)
height 高度(px)
top 上邊界坐標(px)
right 右邊界坐標(px)
bottom 下邊界坐標(px)
left 左邊界坐標(px)
有了這個關(guān)鍵點,下面帶著大家看具體如何一步步優(yōu)雅地完美地實現(xiàn)這個組件。
首先獲取布局信息對象:
let menuRect = wx.getMenuButtonBoundingClientRect()
1、實現(xiàn)左側(cè)膠囊
獲取左側(cè)膠囊的高度:
this.height_capsule = menuRect.height
賦值給view :
<view class="nav_capsule" >
然后,對膠囊內(nèi)部采用flex對其進行布局及一些細節(jié)處理,膠囊的單獨實現(xiàn)就完成了。
2、實現(xiàn)左側(cè)膠囊與右側(cè)膠囊對齊
在其外包一層父級view,即導航條。對導航條進行與右側(cè)一樣的上邊距和下邊距填充。
<view class="navbar" >
獲取邊距值:
this.paddingTop = menuRect.top this.paddingBottom = menuRect.top - wepy.getSystemInfoSync().statusBarHeight
這樣,此時對齊效果就實現(xiàn)了。
3、自定義標題垂直水平居中
我們對導航條內(nèi)部進行flex布局,由于右側(cè)膠囊是系統(tǒng)默認的,要使標題塊居中,就需要做一個右側(cè)膠囊占位,同時給導航左右設(shè)置那邊距。
導航左右設(shè)置內(nèi)邊距:
padding-left:20rpx; padding-right:20rpx;
右側(cè)膠囊占位:
<view class="nav_right" ></view> this.width_capsule = menuRect.width
此時,標題塊就處于居中的位置了。然后對齊進行垂直水平居中和省略號控制就好了。
4、完善導航條布局樣式
上面,一個自定義導航條的樣式布局就基本完成。但要達到可以很優(yōu)雅地被使用還是需要一些完善的。
-設(shè)置定位:使其被任意頁面調(diào)用都處于視窗最頂部固定不變的位置。
position: fixed;top: 0;
設(shè)置層級:使其被任意頁面調(diào)用都處于頁面中最高層級視窗的最前面。
z-index: 99999;
增加占位塊:使其使其被任意頁面調(diào)用都不會遮擋其他頁面元素。
<view class="placeholder" wx:if="{{navbar.flag}}" ></view> this.height = menuRect.bottom + this.paddingBottom; .placeholder{width: 100%;}
然后,用一個view包裹navbar和placeholder,就是一個完善的自定義導航條了。
功能實現(xiàn)
1、顯示自定義小程序頂部導航
自定義導航,需要在單個頁面中設(shè)置參數(shù):
config = { navigationStyle: "custom" };
,由于在對局部頁面進行自定義時,
客戶端 7.0.0 以下版本,navigationStyle 只在 app.json 中生效。
所以,我們要對版本進行兼容判斷,是否顯示自定義導航。
this.navbar.flag = wx.getSystemInfoSync().version.split('.')[0] >= 7 ? true : false <view class="navbar-box" wx:if="{{navbar.flag}}">
2、顯示返回上一頁按鈕
如果沒有上一頁,就不需要返回上一頁功能:
this.showBack = getCurrentPages().length > 1 ? true : false <button class="nav_back" @tap="navBack" wx:if="{{showBack}}">
如果此按鈕不顯示,只剩下去首頁按鈕,分割線也要隱藏掉:
<view class="divide" wx:if="{{showBack}}"></view>
到此,一個自定義導航組件就完整地實現(xiàn)了。還在為兼容或者調(diào)用時需要適配很多的問題而一籌莫展的童鞋,看到這兒是不是可以展顏了呀。完整代碼呈現(xiàn)如下:
github分享:github.com/linger777/x…
gitee分享:gitee.com/linger777/x…
小程序片段分享:developers.weixin.qq.com/s/AzGaZTmV7…
有需要的童鞋自取。下面給大家介紹下如何使用:
使用說明
定義頁面自定義頂部導航
config = { navigationStyle: "custom" };
引入組件
import navbar from '@/components/navbarNew'
注冊組件
components = {navbar, }
調(diào)用組件
<navbar :navbar.sync="navbar"></navbar>
賦值
data = { navbar: { flag: true, //是否使用navbar title: '頂部導航', // 自定義導航標題 height: '' // 導航高度 }, }
如頁面遇到有 sticky \ fixed 定位的view,按需要可以通過加入style進行調(diào)整
以上就是對自定義頂部導航的全部分享,如有不解,歡迎留言討論。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。