本文實例為大家分享了微信小程序自定義tabbar組件的具體代碼,供大家參考,具體內容如下
由于項目需求,必須自己寫組件:
第一步:在App.json中配置tabBar,自定也組件也必須配置,"custom": true,list里配置所有的tabbar頁面。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
"tabBar": { "custom": true, "color": "red", "selectedColor": "#3b81d7", "backgroundColor": "#000000", "list": [{ "pagePath": "pages/Role/InsureIndex/index", "text": "首頁" }, { "pagePath": "pages/Role/MineIndex/index", "text": "首頁" }, { "pagePath": "pages/index/userInfo/userInfo", "text": "我的" }] }, |
第二步:在pages的同級目錄新建組件,文件夾名字:custom-tab-bar,自定義組件文件名為index。組件代碼如下,應該都能看懂。
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
Component({ properties: {}, data: { indexImg: "../static/images/tabBar/tab_icon_home_nor@2x.png" , indexSelectImg: "../static/images/tabBar/tab_icon_home_sel@2x.png" , aboutUsImg: "../static/images/tabBar/tab_icon_user_nor@2x.png" , aboutUsSelectImg: "../static/images/tabBar/tab_icon_user_sel@2x.png" , _tabbat: null , iPhoneX: false , urls: [ '/pages/Role/InsureIndex/index' , '/pages/index/userInfo/userInfo' ] }, attached() { var self = this //此為業務代碼,可不看 wx.getStorage({ key: 'userInfo' , success: function (res) { const { userRoleCode } = res.data if (userRoleCode == '50' || userRoleCode == '70' ) { self.setData({ [ "urls[0]" ]: '/pages/Role/MineIndex/index' }) } else if (userRoleCode == '30' || userRoleCode == '35' || userRoleCode == '40' ) { self.setData({ [ "urls[0]" ]: '/pages/Role/InsureIndex/index' }) } } }) wx.getSystemInfo({ success(res) { console.log(res.model) if (res.model.indexOf( 'iPhone X' ) >= 0) { self.setData({ iPhoneX: true }) } } }) }, /** * 組件的方法列表 */ methods: { switchTap: function (e) { var self = this var index = e.currentTarget.dataset.index; var urls = self.data.urls wx.switchTab({ url: urls[index], }) } } }) |
index.wxml
1
2
3
4
5
6
7
8
9
10
|
< div class = "_tabbar {{iPhoneX?'_iPhoneX':''}}" > < div class = "titem {{_tabbat==0?'tCdk':''}}" data-index = "0" bind:tap = "switchTap" > < image src = "{{_tabbat==0?indexSelectImg:indexImg}}" /> < b >首頁</ b > </ div > < div class = "titem {{_tabbat==1?'tCdk':''}}" data-index = "1" bind:tap = "switchTap" > < image src = "{{_tabbat==1?aboutUsSelectImg:aboutUsImg}}" /> < b >我的</ b > </ div > </ div > |
index.wxss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
._tabbar { width : 100% ; height : 120 rpx; display : flex; align-items: center ; background : #fff ; font-size : 26 rpx; color : #999999 ; box-shadow: 0px -7 rpx 13 rpx 0px rgba( 193 , 185 , 204 , 0.13 ); } ._tabbar .titem { text-align : center ; width : 50% ; } ._tabbar .titem image { display : block ; margin : auto ; width : 48 rpx; height : 48 rpx; margin-bottom : 10 rpx; } ._tabbar .tCdk { color : #37ADFE ; } ._iPhoneX { height : 148 rpx; } |
index.json
1
2
3
4
|
{ "component" : true , "usingComponents" : {} } |
以上為組件代碼,點擊tabbar跳轉頁面時,會重新加載tabbar組件,導致選中樣式一直是默認的,因此需要在用到tabbar的頁面的js文件中做如下操作:(以 “首頁” 頁面為例)
1
2
3
4
5
|
onShow: function () { this .getTabBar().setData({ _tabbat: 0 }) }, |
以上就已經完成了,但是看網上大家說會出現兩個tabBar,我這邊是沒出現(一個自定義,一個自帶的),如果出現的話,在app.js中的onLaunch函數中加入 wx.hideTabBar() , 隱藏自帶的tabbar就可以了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/weixin_38045993/article/details/114702411