微信小程序开发---自定义底部tabBar

2024-06-22 15:12

本文主要是介绍微信小程序开发---自定义底部tabBar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自定义tabBar注意事项:

  • 在自定义 tabBar 模式下 ,为了保证低版本兼容以及区分哪些页面是 tab 页,app.json文件中 tabBar 的相关配置项需完整声明,但这些字段不会作用于自定义 tabBar 的渲染。
  • 所有 tabBar 的样式都由该自定义组件渲染。推荐用 fixed 在底部的 cover-view + cover-image 组件渲染样式,以保证 tabBar 层级相对较高。(不使用也没关系)
  • 与 tabBar 样式相关的接口,如 wx.setTabBarItem 等将失效。
  • 每个 tab 页下的自定义 tabBar 组件实例是不同的,可通过自定义组件下的 getTabBar 接口,获取当前页面的自定义 tabBar 组件实例。例如:如需实现 tab 选中态,要在当前页面下,通过 getTabBar 接口获取组件实例,并调用 setData 更新选中态。

实现步骤:

1. 配置信息

  • 在 app.json 中的 tabBar 项指定 custom 字段值为 true,同时其余 tabBar 相关配置也补充完整。
  • 所有 tab 页的 json 里需声明 usingComponents 项,也可以在 app.json 全局开启。
  • 代码示例 ( app.json中的配置项):
    "tabBar": {"custom": true,"color": "#000000","selectedColor": "#CBB486","borderStyle": "white","list": [{"pagePath": "pages/member-announce/index","text": "公告","iconPath": "/public/img/icon-announce.png","selectedIconPath": "/public/img/icon-announce-selected.png"},{"pagePath": "pages/member-operation/index","text": "活动","iconPath": "/public/img/icon-operation.png","selectedIconPath": "/public/img/icon-operation-selected.png"},{"pagePath": "pages/space-map/index","text": "空间","iconPath": "/public/img/icon-spaceNew.png","selectedIconPath": "/public/img/icon-space-selectedNew.png"},{"pagePath": "pages/member-center/index","text": "我的","iconPath": "/public/img/icon-centerNew.png","selectedIconPath": "/public/img/icon-center-selectedNew.png"}]},

其中 iconPath 代表未被选中时的 icon 图标,selectedIconPath 代表当前被选中时的  icon图标。

2. 添加 tabBar 代码文件

  • 在代码根目录下添加入口文件 
    • 文件名必须为 custom-tab-bar
    • 必须在根目录处添加(与page文件同级)
custom-tab-bar/index.js
custom-tab-bar/index.json
custom-tab-bar/index.wxml
custom-tab-bar/index.wxss

3. 编写tabBar代码

自定义组件的方式编写即可,该自定义组件完全接管 tabBar 的渲染。另外,自定义组件新增 getTabBar 接口,可获取当前页面下的自定义 tabBar 组件实例。

4. 实现tabBar选中态:

在 tabBar 所在页面的 js或ts 文件中的onShow方法写入:

onShow() {if (typeof this.getTabBar === 'function' && this.getTabBar()) {this.getTabBar().setData({selected: 0 // 当前页面所在数据的索引值})}},

大家可根据上述步骤一步步实现,下面是我的代码demo。先配置好上述步骤中标红的1、2,再赋值下面代码,最后再在每个tabBar所在的页面配置好选中态,再根据项目需求调整即可。

自定义 tabBar 代码示例分享:

custom-tab-bar文件中的index.wxml:

<view class="tab-bar"><view wx:for="{{list}}" wx:key="index" class="tab-bar-item {{item.bulge?'bulge':''}}" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab"><view wx:if="{{item.bulge}}" class="tab-bar-bulge tab-bar-view"></view><image class="image" src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></image><view wx:if="{{item.text}}" style="color: {{selected === index ? selectedColor : color}}" class="tab-bar-view">{{item.text}}</view></view>
</view>

custom-tab-bar文件中的index.ts:(我这里用的是ts,用js的伙伴稍微改一下类型就可以)

Component({data: {color: "#545454",selectedColor: "#CBB486",backgroundColor: "#fff",list:[{pagePath: "/pages/member-announce/index",text: "公告",iconPath: "/public/img/icon-announce.png",selectedIconPath: "/public/img/icon-announce-selected.png"},{pagePath: "/pages/member-operation/index",text: "活动",iconPath: "/public/img/icon-operation.png",selectedIconPath: "/public/img/icon-operation-selected.png"},{pagePath: "",bulge: true,iconPath: "/public/img/icon-chat-ai.png",selectedIconPath: "/public/img/icon-chat-ai.png"},{pagePath: "/pages/space-map/index",text: "空间",iconPath: "/public/img/icon-spaceNew.png",selectedIconPath: "/public/img/icon-space-selectedNew.png"},{pagePath: "/pages/member-center/index",text: "我的",iconPath: "/public/img/icon-centerNew.png",selectedIconPath: "/public/img/icon-center-selectedNew.png"},],},methods: {switchTab(e: { currentTarget: { dataset: any } }) {const data = e.currentTarget.datasetconst url = data.pathif (url === '') {const token = wx.getStorageSync("token");wx.navigateTo({ url: token ? "/pages/member-chat-ai/index" : "/pages/login/index" });} else {console.log(url);wx.switchTab({ url });}}}
})

custom-tab-bar文件中的index.wxss:

.tab-bar {position: fixed;bottom: 0;left: 0;right: 0;/* 兼容 iOS < 11.2 */height: calc(96rpx + constant(safe-area-inset-bottom));/* 兼容 iOS >= 11.2 */height: calc(96rpx + env(safe-area-inset-bottom));background: #fff;display: flex;box-shadow: 0px -10rpx 12rpx rgba(0, 0, 0, 0.08);
}.tab-bar-item {flex: 1;text-align: center;display: flex;justify-content: center;align-items: center;flex-direction: column;
}.tab-bar-item .image {width: 48rpx;height: 48rpx;
}.bulge {background-color: #fff;
}.bulge .image {position: absolute;width: 96rpx;height: 96rpx;top: 13rpx;
}.tab-bar-item .tab-bar-view {font-size: 20rpx;
}

custom-tab-bar文件中的index.json:

{"component": true
}

不要忘记设置选中态:

底部效果如图:

这篇关于微信小程序开发---自定义底部tabBar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084650

相关文章

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

如何自定义一个log适配器starter

《如何自定义一个log适配器starter》:本文主要介绍如何自定义一个log适配器starter的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求Starter 项目目录结构pom.XML 配置LogInitializer实现MDCInterceptor

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

Redis迷你版微信抢红包实战

《Redis迷你版微信抢红包实战》本文主要介绍了Redis迷你版微信抢红包实战... 目录1 思路分析1.1hCckRX 流程1.2 注意点①拆红包:二倍均值算法②发红包:list③抢红包&记录:hset2 代码实现2.1 拆红包splitRedPacket2.2 发红包sendRedPacket2.3 抢

SpringBoot后端实现小程序微信登录功能实现

《SpringBoot后端实现小程序微信登录功能实现》微信小程序登录是开发者通过微信提供的身份验证机制,获取用户唯一标识(openid)和会话密钥(session_key)的过程,这篇文章给大家介绍S... 目录SpringBoot实现微信小程序登录简介SpringBoot后端实现微信登录SpringBoo

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件