微信小程序底部按钮tabbar组件封装

简介: 微信小程序底部按钮tabbar组件封装

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、效果

目录
相关文章
|
1月前
|
小程序 数据可视化 JavaScript
微信小程序:轻松实现时间轴组件
本文介绍了如何在微信小程序中实现一个可视化时间轴组件。该组件适用于展示用户资金流动、投资结算等时间节点,帮助用户直观了解资金去向。时间轴支持自定义节点形状、显示序号、倒序排列等功能,并通过插槽灵活定义动态内容。文中详细介绍了组件的设计与使用方法,以及如何结合动态 slot 实现自定义操作。该组件为展示用户资金信息提供了美观、易用的解决方案。
59 1
微信小程序:轻松实现时间轴组件
|
1月前
|
小程序
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
微信小程序动态tabBar实现:基于自定义组件,灵活支持不同用户角色与超过5个tab自由组合(更新版)
407 1
|
1月前
|
小程序 搜索推荐 API
微信小程序:自定义关注公众号组件样式
尽管关注公众号组件的样式固定且不可修改,但产品经理的需求却需要个性化的定制。在这种情况下,我们需要寻找解决方案,以满足这些特殊需求,尽管这可能有点棘手。
60 0
微信小程序:自定义关注公众号组件样式
|
1月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
55 1
|
1月前
|
缓存 小程序 索引
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
uni-app开发微信小程序时vant组件van-tabs的使用陷阱及解决方案
191 1
|
1月前
|
小程序 JavaScript
微信小程序之input组件及其获取用户输入信息
微信小程序之input组件及其获取用户输入信息
54 1
|
2月前
|
小程序 容器
微信小程序常用组件的简单使用 view,scroll-view,swiper,swiper-item,text,rich-text,button,image
本文介绍了微信小程序中常用组件的使用方法,包括view、scroll-view、swiper与swiper-item、text与rich-text、button以及image组件。详细解释了各组件的功能、属性以及如何在小程序页面中进行使用。
微信小程序常用组件的简单使用 view,scroll-view,swiper,swiper-item,text,rich-text,button,image
|
3月前
|
小程序 开发者
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
本文介绍了如何在Taro项目中实现自定义tabBar。首先,在`app.config.ts`中设置`custom: true`并配置`tabBar`。
130 0
Taro@3.x+Vue@3.x+TS开发微信小程序,使用自定义tabBar
|
1月前
|
小程序
uniapp实现微信小程序隐私协议组件封装
uniapp实现微信小程序隐私协议组件封装
44 0
|
2月前
|
小程序 前端开发 生物认证
微信小程序如何将一个按钮放到页面的最底下?
微信小程序如何将一个按钮放到页面的最底下?
255 5