微信小程序自定義導(dǎo)航欄及其封裝的全過程
應(yīng)用場景:我們在小程序中想要自定義導(dǎo)航欄(當(dāng)然組件庫更方便哈哈)
一、導(dǎo)航欄適配
1.1.在json文件里更改頁面配置項
???
官方文檔介紹的有:
"navigationStyle": "custom"
這樣原本默認(rèn)的導(dǎo)航欄就會消失了
PS: 如果是單頁面需要就寫在對應(yīng)頁面的json內(nèi),如果全局需要就寫在app.josn內(nèi)
1.2.導(dǎo)航欄適配每種機(jī)型
???
在app.js
里面獲取statusbarHeight(這個就是每種機(jī)型的導(dǎo)航高度,我們需要獲取并且動態(tài)的展示)
wx.getSystemInfo
獲取。
我們要在對應(yīng)該導(dǎo)航組件的js
文件里面進(jìn)行獲取
data
中定義一個數(shù)據(jù)- 在動態(tài)從
app.js
中獲取 - 將獲取到的
statusBarHeight
,存儲到data
中
在wxml
里面動態(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盒子為空時,那么就會將class="default"的view盒子的樣式設(shè)為display: flex(因為小程序是默認(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開啟多個插槽
// 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)航欄組件
???
因為插槽的使用,這里就很方便了,如果添加內(nèi)容,那么就會顯示默認(rèn)插槽
2.5.效果圖
這就是大概的效果了,當(dāng)然文字箭頭這里都是可以自定義的hh
總結(jié)
到此這篇關(guān)于微信小程序自定義導(dǎo)航欄及其封裝的文章就介紹到這了,更多相關(guān)微信小程序自定義導(dǎo)航欄封裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
easyui給某一個單元格的內(nèi)容增加下劃線的操作方法
在EasyUI的DataGrid組件中,你可以通過自定義單元格的渲染方式來實現(xiàn)給某一個單元格的內(nèi)容增加下劃線的效果,本文給大家介紹easyui如何給某一個單元格的內(nèi)容增加下劃線,感興趣的朋友跟隨小編一起看看吧2024-08-08JavaScript校驗Number(4,1)格式的數(shù)字實例代碼
這篇文章主要介紹了JavaScript校驗Number(4,1)格式的數(shù)字實例代碼,本文實現(xiàn)思路明確代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03js實現(xiàn)跨域的幾種方法匯總(圖片ping、JSONP和CORS)
平時用慣了jQuery.ajax之類的方法,卻時常忽略了它背后的實現(xiàn),本文是學(xué)習(xí)了AJAX基礎(chǔ)及幾種跨域解決方案之后的一些收獲。2015-10-10詳解JavaScript基于面向?qū)ο笾畡?chuàng)建對象(2)
這篇文章主要介紹了JavaScript基于面向?qū)ο笾畡?chuàng)建對象,詳細(xì)的分析面向?qū)ο蟮脑头绞揭约捌渌C合的方式,感興趣的小伙伴們可以參考一下2015-12-12