微信小程序自定義導(dǎo)航欄及其封裝的全過程
應(yīng)用場景:我們?cè)谛〕绦蛑邢胍远x導(dǎo)航欄(當(dāng)然組件庫更方便哈哈)
一、導(dǎo)航欄適配
1.1.在json文件里更改頁面配置項(xiàng)
???
官方文檔介紹的有:

"navigationStyle": "custom"
這樣原本默認(rèn)的導(dǎo)航欄就會(huì)消失了
PS: 如果是單頁面需要就寫在對(duì)應(yīng)頁面的json內(nèi),如果全局需要就寫在app.josn內(nèi)

1.2.導(dǎo)航欄適配每種機(jī)型
???
在app.js 里面獲取statusbarHeight(這個(gè)就是每種機(jī)型的導(dǎo)航高度,我們需要獲取并且動(dòng)態(tài)的展示)
wx.getSystemInfo獲取。

我們要在對(duì)應(yīng)該導(dǎo)航組件的js文件里面進(jìn)行獲取
data中定義一個(gè)數(shù)據(jù)- 在動(dòng)態(tài)從
app.js中獲取 - 將獲取到的
statusBarHeight,存儲(chǔ)到data中

在wxml里面動(dòng)態(tài)的使用該數(shù)據(jù)

這樣機(jī)型適配就完成啦o( ̄︶ ̄)o
二、封裝導(dǎo)航欄組件
?????
2.1.wxml
這里我們使用了插槽(可以看看插槽的內(nèi)容)
<!--components/nav-bar/nav-bar.wxml-->
<view class="nav-bar">
<view class="status" style="height: {{statusHeight}}px;"></view>
<view class="nav">
<view class="left">
<view class="slot">
<slot name="left"></slot>
</view>
<view class="default">
<image class="icon" src="/assets/images/icons/arrow-left.png"></image>
</view>
</view>
<view class="center">
<view class="slot">
<slot name="center"></slot>
</view>
<view class="default">
{{title}}
</view>
</view>
<view class="right"></view>
</view>
</view>2.2.wxss
???
- 這里主要控制導(dǎo)航欄顯示的位置
- 還有默認(rèn)插槽用通過css3的偽類:empty,class="default"的view盒子默認(rèn)的樣式是display: none隱藏的,如果class="slot"的view盒子為空時(shí),那么就會(huì)將class="default"的view盒子的樣式設(shè)為display: flex(因?yàn)樾〕绦蚴悄J(rèn)不顯示默認(rèn)插槽的)
/* components/nav-bar/nav-bar.wxss */
/* 自定義導(dǎo)航 */
.nav {
display: flex;
height: 44px;
color: #fff;
}
.left, .right, .center {
display: flex;
justify-content: center;
align-items: center;
}
.nav .left, .nav .right {
width: 120rpx;
}
.nav .center {
flex: 1;
}
/* 控制內(nèi)容顯示 */
.left .icon {
width: 40rpx;
height: 40rpx;
}
.default {
display: none;
}
.slot:empty + .default {
display: flex;
}
2.3.js
- 在properties下設(shè)置標(biāo)題
- 在options開啟多個(gè)插槽
// components/nav-bar/nav-bar.js
const app = getApp()
Component({
options: {
multipleSlots: true
},
properties:{
title: {
type: String,
value: "導(dǎo)航標(biāo)簽"
}
},
data:{
statusHeight:20
},
lifetimes: {
attached(){
this.setData({statusHeight: app.globalData.statusHeight})
}
}
})
2.4.在頁面中使用導(dǎo)航欄組件
???
因?yàn)椴宀鄣氖褂?,這里就很方便了,如果添加內(nèi)容,那么就會(huì)顯示默認(rèn)插槽


2.5.效果圖
這就是大概的效果了,當(dāng)然文字箭頭這里都是可以自定義的hh

總結(jié)
到此這篇關(guān)于微信小程序自定義導(dǎo)航欄及其封裝的文章就介紹到這了,更多相關(guān)微信小程序自定義導(dǎo)航欄封裝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript實(shí)現(xiàn)拖拽排序的代碼
這篇文章主要介紹了Javascript實(shí)現(xiàn)拖拽排序的代碼,本文在vue運(yùn)行環(huán)境下給大家演示下效果圖,對(duì)js拖拽排序?qū)嵗a感興趣的朋友跟隨小編一起看看吧2022-09-09
JavaScript DOM節(jié)點(diǎn)操作方式全面講解
DOM(Document Object Model 文檔對(duì)象模型)定義了訪問和操作文檔的標(biāo)準(zhǔn)方法。整個(gè)瀏覽器網(wǎng)頁就是一個(gè)Dom樹形結(jié)構(gòu),這篇文章主要介紹了JavaScript DOM節(jié)點(diǎn)操作方式2022-10-10
JavaScript中for...in、for...of和for await...of迭代方式
方法2023-04-04
js實(shí)現(xiàn)3D粒子酷炫動(dòng)態(tài)旋轉(zhuǎn)特效
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)3D粒子酷炫動(dòng)態(tài)旋轉(zhuǎn)特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
JavaScript設(shè)計(jì)模式之裝飾者模式定義與應(yīng)用示例
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之裝飾者模式定義與應(yīng)用,結(jié)合實(shí)例形式分析了JavaScript裝飾者模式的原理、定義及應(yīng)用方法,需要的朋友可以參考下2018-07-07
JS實(shí)戰(zhàn)例子之實(shí)現(xiàn)自動(dòng)打字機(jī)動(dòng)效
什么是打字機(jī)效果呢?打字機(jī)效果即為文字逐個(gè)輸出,實(shí)際上就是一種Web動(dòng)畫,下面這篇文章主要給大家介紹了關(guān)于JS實(shí)戰(zhàn)例子之實(shí)現(xiàn)自動(dòng)打字機(jī)動(dòng)效的相關(guān)資料,需要的朋友可以參考下2023-01-01

