亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

小程序組件之自定義頂部導航實例

2019-11-19 11:21:22
字體:
來源:轉載
供稿:網友

前言

微信小程序憑借著“不占內存,即用即走”等特點,加上微信的社交的屬性,其用戶量一路保持快速的增長。對其的應用要求也日漸增高,使用更多樣化、個性化。其中,對頂部導航的自定義實現,因交互功能成了一個普遍需要實現的組件,而尤因其不同設備下樣式的兼容問題 如何更優雅的實現 使其成為大家討論的熱點。

下面我們從對其的設計、實現、使用上進行詳細闡述,讓大家更加了解這個組件。原創文章,若有寫的不妥之處,歡迎大家指出更正。

自定義導航的設計

界面設計

目前,大多小程序對自定義導航的設計是:標題居中;左側膠囊包裹返回上一頁按鈕和到首頁按鈕,要和右側系統默認膠囊樣式布局一致。效果如下:

功能設計

主要功能如下:

  1. 自定義 小程序 頂部導航 :微信版本號 <7 的無此功能
  2. 去首頁 功能 :首頁沒有此功能
  3. 返回 功能:無上一頁沒有此功能
  4. 模擬系統默認樣式:和系統默認右邊膠囊樣式保持一致
  5. 居中顯示標題:字數過多時 省略號代替

詳細實現

布局樣式實現

這個組件的實現的主要的重點在于不同設備上的樣式兼容。由于右側膠囊在不同設備下的表現是不一樣的,所以左側膠囊的布局樣式要隨不同設備進行自適應,既左側膠囊的高度間距等樣式數據要先計算出來再賦予其值。故難點就在于如何獲得這些值。經過一番針對個別手機的兼容踩坑操作(此處省略一萬字...😢),最終得到正解(此處感謝小伙伴的雪中送炭🙏),那就是可以一勞永逸的wx.getMenuButtonBoundingClientRect()

wx.getMenuButtonBoundingClientRect()
獲取菜單按鈕(右上角膠囊按鈕)的布局位置信息。坐標信息以屏幕左上角為原點。
菜單按鈕的布局位置信息:
width  寬度(px)
height  高度(px)
top  上邊界坐標(px)
right  右邊界坐標(px)
bottom  下邊界坐標(px)
left  左邊界坐標(px)

有了這個關鍵點,下面帶著大家看具體如何一步步優雅地完美地實現這個組件。

首先獲取布局信息對象:

let menuRect = wx.getMenuButtonBoundingClientRect()

1、實現左側膠囊

獲取左側膠囊的高度:

this.height_capsule = menuRect.height

賦值給view :

<view class="nav_capsule" style="height:{{height_capsule}}px">

然后,對膠囊內部采用flex對其進行布局及一些細節處理,膠囊的單獨實現就完成了。

2、實現左側膠囊與右側膠囊對齊

在其外包一層父級view,即導航條。對導航條進行與右側一樣的上邊距和下邊距填充。

<view class="navbar" style="padding-top: {{paddingTop}}px; padding-bottom: {{paddingBottom}}px;">

獲取邊距值:

this.paddingTop = menuRect.topthis.paddingBottom = menuRect.top - wepy.getSystemInfoSync().statusBarHeight

這樣,此時對齊效果就實現了。

3、自定義標題垂直水平居中

我們對導航條內部進行flex布局,由于右側膠囊是系統默認的,要使標題塊居中,就需要做一個右側膠囊占位,同時給導航左右設置那邊距。

導航左右設置內邊距:

padding-left:20rpx;padding-right:20rpx;

右側膠囊占位:

<view class="nav_right" style="height: {{height_capsule}}px; width: {{width_capsule}}px;"></view>this.width_capsule = menuRect.width

此時,標題塊就處于居中的位置了。然后對齊進行垂直水平居中和省略號控制就好了。

4、完善導航條布局樣式

上面,一個自定義導航條的樣式布局就基本完成。但要達到可以很優雅地被使用還是需要一些完善的。

-設置定位:使其被任意頁面調用都處于視窗最頂部固定不變的位置。

position: fixed;top: 0;

設置層級:使其被任意頁面調用都處于頁面中最高層級視窗的最前面。

z-index: 99999;

增加占位塊:使其使其被任意頁面調用都不會遮擋其他頁面元素。

<view class="placeholder" wx:if="{{navbar.flag}}" style="height:{{height}}px"></view>this.height = menuRect.bottom + this.paddingBottom;.placeholder{width: 100%;}

然后,用一個view包裹navbar和placeholder,就是一個完善的自定義導航條了。

功能實現

1、顯示自定義小程序頂部導航

自定義導航,需要在單個頁面中設置參數:

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>

到此,一個自定義導航組件就完整地實現了。還在為兼容或者調用時需要適配很多的問題而一籌莫展的童鞋,看到這兒是不是可以展顏了呀。完整代碼呈現如下:

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, }

調用組件

<navbar :navbar.sync="navbar"></navbar>

賦值

 data = {  navbar: {   flag: true, //是否使用navbar   title: '頂部導航', // 自定義導航標題   height: '' // 導航高度  }, }

如頁面遇到有 sticky / fixed 定位的view,按需要可以通過加入style進行調整

style="top: {{navbar.flag ? navbar.height : 0}}rpx;"

以上就是對自定義頂部導航的全部分享,如有不解,歡迎留言討論。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线观看网址综合| 中文日韩在线观看| 午夜精品一区二区三区在线播放| 91久久夜色精品国产网站| 亚洲自拍偷拍色片视频| 欧美激情xxxx| 国产精品一区久久| 精品magnet| 欧美日韩裸体免费视频| 久久久av网站| 亚洲天堂第一页| 最近2019年好看中文字幕视频| 国产一区二区三区在线免费观看| www亚洲精品| 欧美日本在线视频中文字字幕| 欧美大秀在线观看| 精品久久久视频| 精品日韩美女的视频高清| 亚洲网站在线观看| 精品国产一区二区三区在线观看| 91精品久久久久久综合乱菊| 日本亚洲精品在线观看| 欧美xxxx做受欧美| 成人自拍性视频| 日韩av电影院| 亚洲美女精品成人在线视频| 久久乐国产精品| 国产精品久久久久久亚洲调教| 欧美精品在线极品| 欧美日韩亚洲一区二区三区| 91免费看国产| 国外成人免费在线播放| 欧美日韩午夜视频在线观看| 日韩欧美在线视频免费观看| 亚洲国产中文字幕在线观看| 欧美性精品220| 亚洲人成在线电影| 久久精品电影网| 欧美日韩中文字幕| 2019最新中文字幕| 成人国产亚洲精品a区天堂华泰| 国产精品福利观看| 精品国产一区二区三区久久久| 2019最新中文字幕| 一区二区三区www| 国产亚洲精品高潮| 欧美丰满老妇厨房牲生活| 国产一区二区三区视频免费| 亚洲一级黄色片| 亚洲一区二区三区四区视频| 91精品中国老女人| 韩国日本不卡在线| 91黄色8090| 亚洲精品丝袜日韩| 18一19gay欧美视频网站| 欧美成人黑人xx视频免费观看| 亚洲激情免费观看| 国产日韩精品入口| 国产一区二区三区网站| 姬川优奈aav一区二区| 久99久在线视频| 亚洲综合中文字幕在线观看| 亚洲国产天堂网精品网站| 久久亚洲精品视频| 国产成人综合精品在线| 国产免费久久av| 日韩亚洲精品视频| 久久人91精品久久久久久不卡| 亚洲石原莉奈一区二区在线观看| 97精品欧美一区二区三区| 欧美大片大片在线播放| 136fldh精品导航福利| www.亚洲天堂| 精品动漫一区二区三区| 日韩有码片在线观看| 国产精品老女人精品视频| 疯狂做受xxxx欧美肥白少妇| 亚洲一区二区三区成人在线视频精品| 亚洲欧美在线一区| 国产精品对白刺激| 疯狂做受xxxx高潮欧美日本| 国内精品久久久| 午夜精品在线观看| 日韩av快播网址| 欧美激情网友自拍| 精品视频在线播放免| 91禁外国网站| 欧美丝袜一区二区| 亚洲视频第一页| 91在线视频精品| 日韩高清a**址| 国产精品美女午夜av| 亚洲一区二区日本| 一区二区三区天堂av| 久久久久国色av免费观看性色| 5278欧美一区二区三区| 日韩电影网在线| 911国产网站尤物在线观看| 久久久久久91香蕉国产| 国产精品亚洲欧美导航| 久久精品成人欧美大片古装| 亚洲高清免费观看高清完整版| 日本午夜在线亚洲.国产| 欧美精品免费在线观看| 亚洲国产又黄又爽女人高潮的| 亚洲理论片在线观看| 欧美色图在线视频| 亚洲国产毛片完整版| 亚洲国产成人精品久久久国产成人一区| 成人精品久久av网站| 伊人伊人伊人久久| 国内免费久久久久久久久久久| 欧美另类极品videosbestfree| 国产精品综合久久久| 久久精品色欧美aⅴ一区二区| 国产成人亚洲综合青青| 欧美乱大交xxxxx| 亚洲成年人影院在线| 欧美裸体xxxx极品少妇软件| 欧美精品在线第一页| 日韩欧美国产网站| 插插插亚洲综合网| 美女久久久久久久久久久| 成人网址在线观看| 日韩电影中文 亚洲精品乱码| 欧美视频二区36p| 日韩大陆欧美高清视频区| 成人av.网址在线网站| 国产日韩综合一区二区性色av| 亚洲美女精品成人在线视频| 亚洲欧洲激情在线| 91免费国产视频| 欧美亚洲国产另类| 不卡av电影在线观看| 欧美亚洲激情视频| 亚洲一级黄色片| 国产mv免费观看入口亚洲| 久久不射电影网| 成人国产精品久久久久久亚洲| 66m—66摸成人免费视频| 久久久女人电视剧免费播放下载| 久久精品国产2020观看福利| 成人免费网视频| 久久精品亚洲国产| 欧美性猛交丰臀xxxxx网站| 97人人做人人爱| 日韩高清电影免费观看完整版| 久久久国产一区二区三区| 色综合久久久888| 亚洲小视频在线观看| 日韩欧美成人免费视频| 国产91精品网站| 日韩电影中文字幕| 亚洲一二在线观看| 青草成人免费视频| 亚洲精品大尺度| 亚洲欧洲中文天堂| 欧美色videos| 国产在线精品播放| 欧美天天综合色影久久精品| 久久久久久久久国产| 久久99精品久久久久久琪琪| 国产精品亚洲综合天堂夜夜| 性视频1819p久久|