当前位置: 首页 > backend >正文

uniapp自定义封装tabbar

uniapp自定义封装tabbar

开发原因: 有很多时候 小程序并没有其类目 需要通过配置发布审核,
ps:需要去掉项目pages.json tabbar配置,不然重进会显示默认,跳转页面不能uni.switchTab。
在这里插入图片描述

  1. 组件tabbar

    <template><viewclass="myTabBar"style="box-sizing: content-box":style="{height: height,background: backgroundColor,'border-top-color': borderStyle,'padding-bottom': isIPhoneXX && iOSBottomBarHeight}"><viewclass="tabBar-item"v-for="(item, index) in list":key="index"@click="onClickItem(index,item)"><view class="tabTag"  :class="{'ischose': tacurrent != index,}" v-if="item.num && item.num>0"><u-badge size="small" :count="item.num" type="error"></u-badge></view><!-- <view class="tabTag" v-if="item.num===-1"><u-badge size="small" :count="item.num" is-dot type="error"></u-badge></view> --><view class="tabBar-img"><imageclass="tabBar-img":src="item.iconPath"mode="widthFix"v-if="tacurrent !== index":style="{width: iconWidth}"></image><imageclass="tabBar-img":src="item.selectedIconPath"mode="widthFix"v-if="tacurrent === index":style="{width: iconWidth}"></image></view><viewclass="tabBar-text":style="{color: color,color: tacurrent === index && selectedColor,'font-size': fontSize,'font-family':'Microsoft YaHei','padding-top': spacing}">{{ item.text }}</view></view></view>
    </template>
    <script>
    export default {components: {},data() {return {iOSBottomBarHeight: '34px',isIPhoneXX: false}},props: {tacurrent: Number, // 当前选中的值color: {// tab 上的文字默认颜色type: String,default: '#100405'},selectedColor: {// tab 上的文字选中时的颜色type: String,default: '#C31107'},backgroundColor: {// tab 的背景色type: String,default: '#ffffff'},borderStyle: {// tabbar 上边框的颜色type: String,default: '#dddddd'},fontSize: {// 文字默认大小type: String,default: '13px'},iconWidth: {// 图标默认宽度type: String,default: '20px'},spacing: {// 图标和文字的间距type: String,default: '0px'},height: {// tabBar 默认高度type: String,default: '50px'},list: {type: Array/**[{pagePath: '', // 页面路径text: '', // tab 上按钮文字iconPath: '', // 图片路径 图片请使用base64selectedIconPath: '', // 选中时的图片路径 图片请使用base64num: '', // 红色数字角标}]*/}},onLoad() {},onShow() {},onHide() {},created() {try {const { isIPhoneXX } = getApp().globalDatathis.isIPhoneXX = isIPhoneXX} catch (e) {}// try {//   const res = wx.getSystemInfoSync()//   console.log('getSystemInfoSync', res)//   if (//     res.model.search('iPhone X') != -1 ||//     res.model.search('iPhone 12 mini') != -1 ||//     res.model.search('iPhone 11') != -1 ||//     res.model.search('iPhone 12') != -1 ||//     res.model.search('iPhone 13') != -1 ||//     res.model.search('iPhone 14') != -1//   ) {//     this.isIPhoneXX = true//   }// } catch (e) {//   // Do something when catch error// }},methods: {onClickItem(index,item) {this.$emit('update:value', index)this.$emit('callback', index,item)}}
    }
    </script><style lang="scss" scoped>
    .myTabBar {// display: flex;// justify-content: space-between;// align-items: center;// border-top: 1px solid #eee;// width: 100%;// padding-top: 10rpx;display: flex;flex-direction: row;align-items: center;position: relative;position: fixed;bottom: 0;left: 0;width: 100%;z-index: 998;padding-bottom:15px;padding-top:5px;box-sizing: initial;.tabBar-item {position: relative;// flex: 1;// text-align: center;// line-height: 1;flex: 1;justify-content: center;height: 100%;padding: 6px 0;display: flex;flex-direction: row;flex-direction: column;align-items: center;}.tabBar-text {line-height: 1;}.tabBar-img {display: inline-block;width: 40rpx;height: 48rpx;}.tabTag {position: absolute;top: 0;left: 50%;// margin: 0 auto;z-index: 9;}.ischose{top: -16% !important;left: 83% !important;}
    }
    </style>

    2.使用页面

    ​ .使用组件

    <!--底部菜单-->
    <template><view class="btn-bar"><tabbar :tacurrent="tacurrent" :list="tabList" @callback="tabbarCallback" /></view>
    </template>
    

    ​ . 定义变量

    tacurrent:0,//当前显示
    tabList:[ {iconPath: "/static/img/Navigation1.png",selectedIconPath: "/static/img/Navigation1_1.png",text: "比赛",pagePath: "/pages/index/index",midButton: true,},{iconPath: "/static/img/Navigation3.png",selectedIconPath: "/static/img/Navigation3_3.png",text: "俱乐部",pagePath: "/pages/club/index",midButton: false,},{iconPath: "/static/img/Navigation4.png",selectedIconPath: "/static/img/Navigation4_4.png",text: "裁判工作台",customIcon: false,pagePath: "/pages/referee/index",},{iconPath: "/static/img/Navigation5.png",selectedIconPath: "/static/img/Navigation5_5.png",text: "我的",customIcon: false,pagePath: "/pages/center/center",},]
    

    .悬浮底部样式

    .btn-bar {position: fixed;bottom: 0;left: 0;width: 100%;height: 130rpx;background-color: #ffffff;box-shadow: 0 0 36rpx 0 rgba(0, 0, 0, 0.08);display: flex;justify-content: space-between;align-items: center;padding: 0 24rpx;z-index: 9999;
    }
    
http://www.xdnf.cn/news/1917.html

相关文章:

  • 探索亚马逊云科技:开启您的云计算之旅
  • Safety Estimands与Efficacy Estimands的差异剖析
  • 模式设计简介
  • 北斗导航 | 北斗卫星导航单点定位精度提升方法总结,原理,公式,关键代码
  • 架构师面试(三十六):广播消息
  • websheet 之 sheet操作
  • c++11新特性随笔
  • 使用开源免费雷池WAF防火墙,接入保护你的网站
  • Shell 脚本入门:从零开始写自动化脚本
  • 代码随想录算法训练营day11(二叉树)
  • 轻量级静态网站托管:服务器配置与网站性能深入探讨
  • Sui 携手 xMoney 和 xPortal 推出虚拟万事达卡,拓展现实支付场景接入
  • 分布式ID生成方案详解
  • 软件为什么需要性能测试?软件测试机构性能测试注意事项有哪些?
  • 实时数据驱动未来:谷云科技CDC实时数据集成平台新版本发布
  • JAVA常用分布式锁Redisson
  • 大模型驱动智能服务变革:从全流程赋能到行业纵深落地
  • WHAT - 前端开发书单推荐
  • 带宽?增益带宽积?压摆率?
  • 基于物联网的智能家居安全防护系统设计
  • Java 24 深度解析:云原生时代的性能更新与安全重构
  • 用 Python 打造打篮球字符动画!控制台彩色炫酷输出,抖音搞怪视频灵感还原
  • 基于 Python(selenium) 的今日头条定向爬虫:根据输入的关键词在今日头条上进行搜索,并爬取新闻详情页的内容
  • 大型超市仓储管理5大痛点解析 智能穿梭车如何实现降本增效?
  • 数字后端设计 (五):布线——芯片里的「交通总动员」
  • [自记录]一次Nvidia显卡的AI容器基础镜像制作过程(含Torch版本和ONNXRuntime版本选择)
  • AI新战局:Gemini 2.5 Pro强势挑战OpenAI o3,谁是真“全能”?“锯齿AGI”时代已来临?
  • 快速了解redis,个人笔记
  • CRM管理优化的7个关键指标:提升客户留存率的科学方法
  • 优化算法