1、准备
tabbar按钮的设计详情可查看上一篇博客:
https://blog.csdn.net/Twinkle_sone/article/details/113981042?spm=1001.2014.3001.5501
2、组件封装
(1)tabbartbn.wxml
这里只是将原本的页面代码抽取过来:
<!-- --------------------------底部按钮--------------------------- -->
<view class="tabBar">
<block wx:for="{
{tabinf}}" wx:key="index" >
<view class="tabBar-item" bindtap="changeTab" data-id="{
{item.id}}">
<view>
<image wx:if="{
{tabind != item.id}}" class="tabBar-icon" src='{
{item.img}}'>
</image>
<image wx:if="{
{tabind == item.id}}" class="tabBar-icon" src='{
{item.img1}}'>
</image>
</view>
<view class="" bindtap="changeTab" data-id="{
{item.id}}" style="color:{
{
tabind == item.id ? 'blue' : 'grey'}};">{
{item.title}}</view>
</view>
</block>
</view>
<!-- --------------------------底部按钮--------------------------- -->
(2)tabbartbn.wxss
还是将原来的css代码拿过来。
.tabBar-icon{
width:54rpx;
height: 54rpx;
}
.tabBar{
width:100%;
position: fixed;
bottom:0;
padding:10rpx;
margin-left:-4rpx;
background:pink;
font-size:24rpx;
color:#8A8A8A;
box-shadow: 3rpx 3rpx 3rpx 3rpx #aaa;
z-index: 9999;
display: flex;
}
.tabBar-item{
float:left;
width: 100%;
text-align: center;
overflow: hidden;
}
(3)tabbartbn.js
重点是在js代码的修改上
// components/tabbarbtn/tabbarbtn.js
Component({
/**
* 组件的属性列表
*/
properties: {
//接收父组件传来的值
tabinf:{
type:Array,
value:[]
}
},
/**
* 组件的初始数据
*/
data: {
tabind:0,
},
/**
* 组件的方法列表
*/
methods: {
//切换tab页
changeTab(e){
let ind = e.currentTarget.dataset.id;
this.setData({
tabind:ind,
})
//发送事件监听,父组件触发事件时,子组件传递参数ind给父组件
this.triggerEvent('changeTabs',{
ind})
},
}
})
3、组件调用
1、test.wxml
<!--
调用tabbarbtn组件,需要先在json文件中引用
tabinf = "{
{tabinf}}" 将tabinf值传递给子组件
bind:changeTabs="changeTabs" 绑定子组件的changeTabs方法
-->
<tabbarbtn id = "tabbarbtn" tabinf = "{
{tabinf}}" bind:changeTabs="changeTabs"></tabbarbtn>
<view wx:if="{
{tabind == 0}}">
page0
</view>
<view wx:if="{
{tabind == 1}}">
page1
</view>
<view wx:if="{
{tabind == 2}}">
page2
</view>
<view wx:if="{
{tabind == 3}}">
page3
</view>
2、test.json
{
"usingComponents": {
"tabbarbtn":"../../../components/tabbarbtn/tabbarbtn"
}
}
3、test.js
Page({
/**
* 页面的初始数据
*/
data: {
tabind:0,
tabinf:[
{
//原始图标图片
img:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记.png',
//点击激活状态时的图标图片
img1:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记1.png',
//按钮id
id:0,
//按钮图标下方显示文字
title:'页面0'
},
{
img:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记.png',
img1:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记1.png',
id:1,
title:'页面1'
},
{
img:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记.png',
img1:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记1.png',
id:2,
title:'页面2'
},
{
img:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记.png',
img1:'cloud://it-cloud-hdrd7.6974-it-cloud-hdrd7-1300036058/记账本/标记1.png',
id:3,
title:'页面3'
}
]
},
//接收子组件传来的参数
changeTabs(e){
this.setData({
tabind:e.detail.ind
})
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
4、效果