微信小程序 自定义 tabBar

自定义 tabBar | 微信开放文档

本文案例使用的Taro 非原生微信小程序

使用流程

1. 配置信息

  • 在 app.json 中的 tabBar 项指定 custom 字段,同时其余 tabBar 相关配置也补充完整。
  • 所有 tab 页的 json 里需声明 usingComponents 项,也可以在 app.json 全局开启。


    案例Taro项目文件:app.config.js:
    export default {pages: ['pages/hotel/index', 'pages/order/index', 'pages/room/index', 'pages/mine/index'],subPackages: [{root: 'subPages',pages: ['login/index',  'webView/index'],},],tabBar: {custom: true,selectedColor: '#da4297',backgroundColor: '#fff',borderStyle: 'white',list: [{pagePath: 'pages/hotel/index',selectedIconPath: 'assets/img/tab/home-fill.png',iconPath: 'assets/img/tab/home-line.png',text: '首页',},{pagePath: 'pages/order/index',selectedIconPath: 'assets/img/tab/order-fill.png',iconPath: 'assets/img/tab/order-line.png',text: '订单',},{pagePath: 'pages/room/index',selectedIconPath: 'assets/img/tab/shop-fill.png',iconPath: 'assets/img/tab/shop-line.png',text: '商城',},{pagePath: 'pages/mine/index',selectedIconPath: 'assets/img/tab/mine-fill.png',iconPath: 'assets/img/tab/mine-line.png',text: '我的',},],},};
    
    tabBar文件类目

2. 添加 tabBar 代码文件

代码根目录下添加入口文件:

custom-tab-bar/index.js
custom-tab-bar/index.json
custom-tab-bar/index.wxml
custom-tab-bar/index.wxss

案例:使用的Taro 非原生微信小程序

 

3. 编写 tabBar 代码

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

index.jsx文件是自定义的tabBar 内容

import { ClassNames, ConstantList, StorageUtil } from '@/util';
import { CoverImage, CoverView } from '@tarojs/components';
import { inject, observer } from 'mobx-react';
import Taro from '@tarojs/taro';
import React, { Component } from 'react';
import './index.scss';@inject('appStore')
@inject('initMod')
@observer
export default class StoreHome extends Component {constructor(props) {super(props);this.state = {color: '#979797',selectedColor: '#3D4DA4',// 自己定义的字段和内容list: [{pagePath: 'pages/hotel/index',selectedIconPath: '/assets/img/tab/home-fill.png',iconPath: '/assets/img/tab/home-line.png',text: '首页',},{pagePath: 'pages/order/index',selectedIconPath: '/assets/img/tab/order-fill.png',iconPath: '/assets/img/tab/order-line.png',text: '订单',requestLogin: true,},{appId: ConstantList.PASS_LOGIN_APPID,selectedIconPath: '/assets/img/tab/shop-fill.png',iconPath: '/assets/img/tab/shop-line.png',text: '商城',},{pagePath: 'pages/mine/index',// reallyPath:'/Coupon', selectedIconPath: '/assets/img/tab/mine-fill.png',iconPath: '/assets/img/tab/mine-line.png',text: '我的',requestLogin: true,},],};}switchTab = (data, index) => {// 如果需要登录 又没有token的话,则跳转到登录页const token = Taro.getStorageSync(ConstantList.TOKEN);if (data.requestLogin && !token) {Taro.navigateTo({url: `/subPages/login/index?redirectTo=/${data.pagePath}`,});return;}if (!data.building) {// 跳转其他小程序if (data.appId) {Taro.navigateToMiniProgram({// xxxxxxxxxxx});} else if (data.reallyPath) {// 跳转H5地址 xxxxthis.props.initMod.changeSelectedTab(index); // 记录当前高亮tab} else {Taro.switchTab({ url: '/' + data.pagePath });this.props.initMod.changeSelectedTab(index);}} else {Taro.showToast({title: '该功能即将开放,敬请期待',icon: 'none',duration: 1000,});}};render() {const { list, selectedColor, color } = this.state;const { selectedTab } = this.props.initMod;return (<CoverViewclassName={ClassNames('tab-bar', {'tab-bar_hide': this.props.appStore.state.hideTarBar})}>{list.map((item, index) => {return (<CoverViewkey={'tabBar' + index}className='tab-bar-item'onClick={() => {this.switchTab(item, index);}}><CoverView className='tab-bar-box'>{item.iconPath && item.selectedIconPath && (<CoverImageclassName='image imageSelect'src={selectedTab === index ? item.selectedIconPath : item.iconPath}></CoverImage>)}<CoverViewclassName='text'style={{color: selectedTab === index ? selectedColor : color,}}>{item.text}</CoverView></CoverView></CoverView>);})}</CoverView>);}
}

index.scss tabBar样式文件


.tab-bar {position: fixed;bottom: 0;left: 0;right: 0;height: $size-tabbar;background: white;display: flex;padding-bottom: env(safe-area-inset-bottom);border-radius: 28px 28px 0 0;background: #fff;box-shadow: 0 0 16px 0 rgba(0, 0, 0, 0.08);&_hide {display: none;}.tab-bar-item {flex: 1;text-align: center;display: flex;justify-content: center;align-items: center;flex-direction: column;padding: 10px 0;.tab-bar-box{width: 60px;margin: 0 auto;position: relative;.ring{position: absolute;display: block;width: 16px;height: 16px;background-color: $color-primary;border-radius: 50%;right: 0;top: 0;z-index: 20000;}}.image {width: 50px;height: 50px;margin: 0 auto;}.text {line-height: 30px;font-size: 20px;white-space: nowrap;}}
}

最终自定义样式效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑提示缺少vcruntime140_1.dll的解决方法,总结7种有效方法

vcruntime140_1.dll是Microsoft Visual C 2015运行时库的一部分&#xff0c;它为使用Visual Studio 2015开发的应用程序提供了必要的运行时组件。该文件支持C程序的执行&#xff0c;包括内存管理、输入输出操作以及多线程功能等。缺失或损坏此文件可能导致应用程序无法启动或运…

广告联盟四大家

国内四大广告承接商&#xff1a;①抖音旗下-穿山甲②快手旗下-快手联盟③百度旗下-百青藤④腾讯旗下-优量汇 我们目前在互联网上能看到的所有广告都是由他们发放的&#xff0c;在其中我们打小游戏复活看广告&#xff0c;获得道具看广告&#xff0c;看剧看广告&#xff0c;这…

基于词频统计的聚类算法(kmeans)

基于词频统计的聚类算法&#xff08;kmeans&#xff09; 数据集是三个政府报告文件&#xff0c;这里就不做详细描述了&#xff0c;就是简单的txt文件。 实验过程主要分为如下几步&#xff1a; 1.读取数据并进行停用词过滤 2.统计词频 3.基于三篇文章词频统计的层次聚类 4.基于…

废品回收小程序怎么做?有哪些核心功能?

废品回收行业正逐步走向高质量发展的道路。在国家政策的推动下&#xff0c;再生资源市场需求旺盛&#xff0c;行业内部竞争格局逐渐明朗。 随着互联网技术的发展&#xff0c;"互联网回收"成为废品回收行业的一个新趋势。通过微信小程序这种线上平台&#xff0c;用户…

数据可视化在智慧园区中的核心价值解析

数据可视化在智慧园区中发挥着至关重要的价值。智慧园区是一种基于物联网、大数据、云计算等先进技术的现代化管理模式&#xff0c;旨在通过智能化手段提升园区的管理效率、服务水平和用户体验。而数据可视化作为数据处理和展示的重要工具&#xff0c;正是智慧园区实现这些目标…

BUG: VS Code C++输出中文乱码

BUG: VS Code C输出中文乱码 环境 Windows 11 VS Code 编辑器详情 在Windows 使用 cout 函数输出中文时出现乱码 问题的原因在cmd的显示编码和c程序编码的不同。cmd默认的是gbk编码&#xff0c;而VS Code 软件的CMD终端默认是utf-8编码&#xff0c;因而在输出中文文本时会出…

Ubuntu server 24 安装配置 snort3 3.2.1.0 网络入侵检测防御系统 配置注册规则集

一 下载并安装源代码 地址:https://github.com/snort3/snort3/releases #下载&#xff0c;解压 wget https://github.com/snort3/snort3/archive/refs/tags/3.2.1.0.tar.gz tar zxvf 3.2.1.0.tar.gz 二 安装软件依赖包 1 安装依赖包 sudo apt update sudo apt install…

代码随想录算法训练营第四十四天 | 01背包问题 二维、 01背包问题 一维、416. 分割等和子集

01背包问题 二维 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili 1.dp数组定义 dp[i][j] 下标为[0,i]之间的物品&…

【C#】类和对象的区别

1.区别概述 结构体和类的最大区别是在存储空间上&#xff0c;前者是值类型&#xff0c;后者是引用类型&#xff0c;它们在赋值上有很大的区别&#xff0c;在类中指向同一块空间的两个类的值会随一个类的改变而改变另一个&#xff0c;请看如下代码所示&#xff1a; namespace …

【漯河市人才交流中心_登录安全分析报告-Ajax泄漏滑动距离导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

JavaSE:异常

1、什么是异常 在生活当中&#xff0c;不管是人还是动物又或是植物&#xff0c;都会生病&#xff1b;在程序中也是&#xff0c;作为程序猿&#xff0c;虽然我们会尽力将程序写的完美&#xff0c;可难免会出现一些问题~ 在程序执行过程中&#xff0c;发生的一些不正常行为&…

Windows系统安装openvino(2024.1.0)

一、openvino下载&#xff1a; 下载地址&#xff1a;下载英特尔发行版 OpenVINO 工具套件 (intel.cn) 下载完之后将压缩包解压&#xff0c;然后重命名文件夹为openvino_2024.1.0。 二、环境配置 以python环境为例&#xff1a;&#xff08;建议使用moniconda虚拟环境来安装&am…

Android 图表开发开源库 MPAndroidChart 使用总结

1. 引言 电视项目中需要一个折线图表示节电数据变化情况&#xff0c;类比 H5 来说&#xff0c;Android 中也应该有比较成熟的控件&#xff0c;经过调研后&#xff0c;发现 MPAndroidChart 功能比较强大&#xff0c;网上也有人说可能是目前 Android 开发最好用的一个三方库了&a…

【力扣】LCR 130. 衣橱整理

一、题目描述 二、算法思路 这是⼀道非常典型的「搜索」类问题。 我们可以通过「深搜」或者「宽搜」&#xff0c;从 [0, 0] 点出发&#xff0c;按照题目的要求&#xff08;选择 向右移动一格 或 向下移动一格&#xff0c;但不能移动到衣柜之外 &#xff09;一直往 [m - 1, …

详解Spring IoCDI(二)

目录 承接上文&#xff1a;详解Spring IoC&DI &#xff08;一&#xff09; 1.IoC详解 1.1方法注解Bean 1.2方法注解要配合类注解使用 1.3定义多个对象 1.4重命名Bean 1.5扫描路径 2.DI详解 2.1DI与IoC的关系 2.2属性注入 2.3构造方法注入 2.4Setter注入 2.5 三…

visual studio code 全局搜索

VScode写代码的时候&#xff0c;会经常性的需要进行查找代码&#xff0c;那么怎么在Visual Studio Code中进行查找呢&#xff0c;下面就来大家vscode全局搜索的方法。 想要在vscode全局搜索进行全局搜索&#xff0c;使用快捷键CTRLSHIFTF即可进行搜索&#xff0c;也可以在左边…

哪吒监控+cfcdn+ 反代grp端口

哪吒监控cfcdn 反代grp端口 背景&#xff1a; 哪吒监控&#xff1a;感觉VPS线路不稳定&#xff0c;为了打消自己潜意识&#xff0c;希望量化延迟。 cfcdn&#xff1a;隐藏真实站点&#xff0c;保障小鸡隐秘安全 反代grpc端口: 反代grpc到支持https(TLS)的端口&#xff0c;这…

Elasticsearch 认证模拟题 - 3

1、题目 有一索引有 3 个字段&#xff0c;请写一个查询去匹配这三个字段&#xff0c;并且将三个字段的评分相加作为最后的总评分 # 创建索引 PUT task {"mappings": {"properties": {"fielda":{"type": "text"},"fie…

TrueNAS开启SSH登录ROOT

简介: 从 SCALE Bluefin 22.12.0 开始,为了加强安全性并遵守联邦信息处理标准 (FIPS),root帐户登录已被弃用。所有 TrueNAS 用户都应创建具有所有必需权限的本地管理员帐户,并开始使用它来访问 TrueNAS。当根用户密码被禁用时,只有管理用户帐户才能登录 TrueNAS Web 界面。…

低代码开发平台(Low-code Development Platform)的模块组成部分

低代码开发平台&#xff08;Low-code Development Platform&#xff09;的模块组成部分主要包括以下几个方面&#xff1a; 低代码开发平台的模块组成部分可以按照包含系统、模块、菜单组织操作行为等维度进行详细阐述。以下是从这些方面对平台模块组成部分的说明&#xff1a; …