知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
微信小程序自定義導(dǎo)航欄 膠囊菜單按鈕高度適配 原理簡單 賽過一些大廠的完美適配 媽媽再也不用擔(dān)心我強
發(fā)表時間:2020-10-18
發(fā)布人:葵宇科技
瀏覽次數(shù):226
在自定義小程序?qū)Ш綑跁r,右上角的膠囊(MenuButton)在不同機型測試,會發(fā)現(xiàn)很難適配。
實測中 不同的手機,膠囊高度不一樣、狀態(tài)欄高度不一樣。與模擬器顯示的情況是不一樣的。
完全需要根據(jù)手機,動態(tài)的計算高度。
先看一些小程序頂部導(dǎo)航欄適配的情況
圖一 某團 圖二 某乎 圖三 某東 圖四 某拉
上圖適配做的最好的是某東,但仔細(xì)看仍會有一點錯位,但輸入框的顏色,淡化了這種不和諧感。
為解決這個問題就要搞清楚原理
這是在沒有設(shè)置自定義時的原生導(dǎo)航欄,我們發(fā)現(xiàn)整體的高度就是 (狀態(tài)欄高度 + 導(dǎo)航欄高度)
而狀態(tài)欄高度可以通過 wx.getSystemInfo()獲取,現(xiàn)在就只用解決導(dǎo)航欄高度了
觀察發(fā)現(xiàn),膠囊頂部高度距導(dǎo)航欄頂部高度的高度差 和 膠囊底部高度距導(dǎo)航欄底部高度的高度差,是一樣的
也就是說 導(dǎo)航欄高度 = 膠囊高度 +(高度差)x 2
而膠囊信息可以通過 wx.getMenuButtonBoundingClientRect() 獲取,現(xiàn)在就只用解決高度差了
wx.getMenuButtonBoundingClientRect() 中也返回了膠囊頂部距屏幕頂部距離的信息(top)
所以知 高度差 = 膠囊頂部距屏幕頂部距離 - 狀態(tài)欄高度
用這兩個API 我們可以得到如下的數(shù)據(jù)
導(dǎo)航欄整體高度 偽呆🐎
menu = wx.getMenuButtonBoundingClientRect()
system = wx.getSystemInfo
導(dǎo)航欄高度 = menu.statusBarHeight + menu.height + (menu.top - menu.statusBarHeight) * 2
到此我們就完美解決了導(dǎo)航欄高度的問題
而導(dǎo)航欄內(nèi)容就是
內(nèi)容標(biāo)簽的view高度等于menu.height并且垂直居中
效果
真機效果
最終效果
講完了 上呆🐎
注: 一般需將自定義導(dǎo)航欄單獨出來為組件
app.js 呆🐎
//app.js
App({
globalData: {},
>//獲取應(yīng)用實例
const app = getApp()
Component({
/**
* 組件的屬性列表
*/
properties: {
//導(dǎo)航欄顏色
navColor: {
type: String,
value: '#fff'
}
},
/**
* 組件的初始數(shù)據(jù)
*/
data: {
s: app.system.statusBarHeight, //狀態(tài)欄高度
n: (app.menu.top - app.system.statusBarHeight) * 2 + app.menu.height, //導(dǎo)航欄高度
h: app.menu.height //膠囊高度
}
})
組件.wxml 呆🐎
<cover-view class='nav_box' style='background:{{navColor}}'>
<cover-view style='height:{{s}}px' />
<cover-view class='navBar' style='height:{{n}}px'>
<cover-view class='content' style='height:{{h}}px'>
<!-- 導(dǎo)航自定義內(nèi)容 -->
<!-- 1. 插槽 可在使用頁面插入所需內(nèi)容 -->
<slot></slot>
<!-- 2. 選擇渲染 可在js頁面 設(shè)置渲染type屬性 不同場景傳不同值 -->
<block wx:if='{{type == 0}}'>
導(dǎo)航一
</block>
<block wx:if='{{type == 1}}'>
導(dǎo)航二
</block>
<block wx:else>
導(dǎo)航三
</block>
</cover-view>
</cover-view>
</cover-view>
<view style='height:{{s+n}}px' /> <!-- 注:占位用 -->
組件. wxss 呆🐎
.nav_box {
position: fixed;
width: 100%;
font-size: 15px;
z-index: 999;
}
.navBar {
display: flex;
align-items: center;
padding: 0 10px;
}
.content {
width: 100%;
display: flex;
align-items: center;
background: green;
}
組件使用頁面.json 呆🐎
{
"navigationStyle": "custom", //設(shè)置自定義導(dǎo)航
"usingComponents": {
"navBar": "../../組件/navBar/navBar" //自己的路徑
}
}
相關(guān)案例查看更多
相關(guān)閱讀
- 云南網(wǎng)站開發(fā)哪家好
- 云南小程序開發(fā)制作
- 汽車報廢回收管理軟件
- 霸屏推廣
- 商標(biāo)注冊
- 網(wǎng)站建設(shè)案例
- 報廢車
- 做小程序被騙
- 小程序密鑰
- 網(wǎng)絡(luò)公司哪家好
- 云南省建設(shè)廳網(wǎng)站官網(wǎng)
- 楚雄網(wǎng)站建設(shè)公司
- 公眾號模板消息
- 網(wǎng)站優(yōu)化公司
- 北京小程序制作
- 網(wǎng)站建設(shè)首頁
- web開發(fā)
- 云南企業(yè)網(wǎng)站
- 百度快速排名
- 云南小程序開發(fā)費用
- 小程序開發(fā)公司
- 云南小程序被騙
- 汽車拆解管理軟件
- 云南小程序開發(fā)報價
- 模版信息
- 云南網(wǎng)站優(yōu)化公司
- 網(wǎng)站維護
- 前端
- 昆明小程序公司
- 云南網(wǎng)站建設(shè)靠譜公司