本文实例为大家分享了微信小程序自定义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