微信小程序自定义tabbar底部菜单

news2024/11/15 19:38:37

自定义 tabBar 可以让开发者更加灵活地设置 tabBar 样式,以满足更多个性化的场景。

在自定义 tabBar 模式下,为了保证低版本兼容以及区分哪些页面是 tab 页,tabBar 的相关配置项需完整声明,但这些字段不会作用于自定义 tabBar 的渲染。

app.json 中添加 tabBar 字段:

"tabBar": {
  "custom": true,
  "color": "#666666",
  "selectedColor": "#FF5F15",
  "backgroundColor": "#ffffff",
  "borderStyle": "white",
  "list": [
    {
      "pagePath": "pages/index/index",
      "text": "首页"
    },
    {
      "pagePath": "pages/service/service",
      "text": "服务"
    },
    {
      "pagePath": "pages/order/order",
      "text": "订单"
    },
    {
      "pagePath": "pages/user/user",
      "text": "我的"
    }
  ]
}
  • app.json 中的 tabBar 项指定 custom 字段,同时其余 tabBar 相关配置也补充完整。
  • 所有 tab 页的 json 里需声明 usingComponents 项,也可以在 app.json 全局开启。

添加自定义 tabBar 代码文件,在项目根目录添加入口文件:

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

这里我使用了 vant-weapp 的tabbar组件,所以需要先安装下vant:

npm install @vant/weapp

文件代码:

// custom-tab-bar/index.js
Component({
  data: {
    active: 0,
    list: [
	  {
	    text: '首页',
	    url: 'pages/index/index',
	    icon: 'home',
	    activeIcon: 'home-select'
	  },
	  {
	    text: '服务',
	    url: 'pages/service/service',
	    icon: 'service',
	    activeIcon: 'service-select'
	  },
	  {
	    text: '订单',
	    url: 'pages/order/order',
	    icon: 'order',
	    activeIcon: 'order-select'
	  },
	  {
	    text: '我的',
	    url: 'pages/user/user',
	    icon: 'user',
	    activeIcon: 'user-select'
	  },
	];
  },
  methods: {
    onChange(event) { // 切换tab页面
      this.setData({ active: event.detail });
      wx.switchTab({
        url: this.data.list[event.detail].url.startsWith('/')
          ? this.data.list[event.detail].url
          : `/${this.data.list[event.detail].url}`,
      });
    },

    init() { // 设置tab的active下标(icon)
      const page = getCurrentPages().pop();
      const route = page ? page.route.split('?')[0] : '';
      const active = this.data.list.findIndex(
        (item) =>
          (item.url.startsWith('/') ? item.url.substr(1) : item.url) ===
          `${route}`,
      );
      this.setData({ active });
    },
  },
});

// custom-tab-bar/index.json
{
  "component": true,
  "usingComponents": {
    "van-tabbar": "@vant/weapp/tabbar/index",
    "van-tabbar-item": "@vant/weapp/tabbar-item/index"
  }
}
<!-- custom-tab-bar/index.wxml -->
<van-tabbar 
  active="{{ active }}" 
  bind:change="onChange"
  inactive-color="#999999"
  active-color="#f35000"
>
  <van-tabbar-item class="custom-tab-bar-wrapper" custom-class="custom-tabbar-item" wx:for="{{list}}" wx:key="index">
    <iconfont slot="icon" name="{{item.icon}}" size="36"/>
    <iconfont slot="icon-active" name="{{item.activeIcon}}" size="36"/>
    <view class="text">{{ item.text }}</view>
  </van-tabbar-item>
</van-tabbar>
/* custom-tab-bar/index.wxss */
.custom-tab-bar-wrapper {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.custom-tab-bar-wrapper .text {
  font-size: 24rpx;
}

.custom-tab-bar-wrapper .tab-icon {
  width: 40rpx;
  height: 40rpx;
}

.custom-tabbar-item {
  width: 100% !important;
}

tabbarpage js中的onShow方法中加入:

// pages/service/service.js
onShow() {
  this.getTabBar().init() // 设置tabbar active状态
},

然后在微信开发者工具,【工具】-> 【构建npm】,重新编译。

在这里插入图片描述
tabbar中的图标是用的 iconfont 全局组件,详细使用参考另一篇博客:微信小程序使用 iconfont 彩色图标(mini-program-iconfont-cli)

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

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

相关文章

UC伯克利提出AIGC图像编辑新利器InstructPix2Pix,AI模型P图更加精细

原文链接&#xff1a;https://www.techbeat.net/article-info?id4375 作者&#xff1a;seven_ 最近的一些工作向我们展示了AIGC在创造性生成图像、视频等方面的潜力&#xff0c;相信已有很多研究者在沿着这一方向进行拓展式的挖掘和创新。目前已有很多衍生应用出现在了大家眼前…

Java中的类和对象

文章目录1.面向对象和面向过程的含义2.类的定义与使用2.1什么是类2.2类的定义和格式2.3类名的修改方法![在这里插入图片描述](https://img-blog.csdnimg.cn/f126dbd47491402e93bc83bc07f51673.png)3.类和对象3.1类的实例化3.2成员的访问4.this引用4.1为何要this引用4.2什么是th…

java和vue的学生健康管理系统疫情打卡系统

需求&#xff1a;关注学生健康数据以及疫情打卡 系统分两个角色&#xff1a;学生和管理员 演示视频 https://www.bilibili.com/video/BV1iD4y1h74F/?share_sourcecopy_web&vd_sourceed0f04fbb713154db5cc611225d92156 技术&#xff1a;springbootvueelementuipagehelperm…

医疗器械实验室设计基本要求SICOLAB

医疗器械实验室设计基本要求SICOLAB 医疗器械实验室设计、医疗器械实验室装修、医疗器械实验室建设SICOLAB 一、实验室分类 &#xff08;一&#xff09;基础实验室 生物学评价检验实验室、电气安全检验实验室、环境试验检验实验室、手术医疗器械检验实验室、医用材料检验实…

【图像去噪】双立方插值和稀疏表示图像去噪【含Matlab源码 2009期】

⛄一、稀疏表示模型简介 图像的稀疏表示能够更好地表示出图像的特征, 其理论依据就是, 有用的图像信号是有序的, 而噪声普遍是杂乱无章的, 因此可以提取出能够表示图像特有奇异性特征的信息, 比如边缘、线段、条纹、端点等, 再用特定的过完备字典中的原子进行线性组合, 重构出…

JDK的安装及环境变量配置

一、应用安装 1、可以在官网下载jdk&#xff0c;&#xff08;http://www.oracle.com/&#xff09;下载自己适用的版本。 2、双击下载的 .exe安装包文件,如 jdk-8u131-windows-x64.exe。 3、进入安装向导。 4、点击下一步&#xff0c;更改安装路径&#xff0c;我选择安装在d盘…

30分钟看懂linux内核 - page介绍

【推荐阅读】 浅析linux内核网络协议栈--linux bridge 深入理解SR-IOV和IO虚拟化 了解Docker 依赖的linux内核技术 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 内核中最初勾引我好奇心的还是内存管理方面&#xff0c;我们平时编写应用程…

代码随想录训练营第53天|LeetCode 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

参考 代码随想录 题目一&#xff1a;LeetCode 1143.最长公共子序列 确定dp数组下标及其含义 dp[i][j]&#xff1a;字符串text1中的0&#xff5e;i字符构成的字符串和字符串text2中的0&#xff5e;j字符构成的字符串的最长 公共子序列 的长度为dp[i][j]。注意和之前做过的Leet…

将postgresql配置为Linux服务管理 systemctl service

发行版安装的数据库在装完后会自动添加数据库服务&#xff0c;但编译安装的不会&#xff0c;需要手动添加。 cd postgresql-14.0/contrib/start-scripts/ cp linux /etc/init.d/postgresql cd /etc/init.d/ vi postgresql 修改以下部分 ## EDIT FROM HERE# Installation pre…

Vuex4.0.0 源码解析

本文章基于以下版本撰写 VUE 版本&#xff1a; 3.0VUEX 版本&#xff1a;4.0.0Vuex仓库&#xff1a;https://github.com/vuejs/vuex/tree/v4.0.0Vux文档&#xff1a;https://vuex.vuejs.org/zh/ 在 vue 中使用 vuex import { createApp } from vue import { createStore } f…

C语言中函数的先后关系,java和C语言的语法区别

以上代码中&#xff0c;sum函数在上面&#xff0c;main函数在下面&#xff0c;在main函数中就可以调用sum函数。 如果sum函数定义在main函数后面&#xff0c;则需要在main函数前面声明sum函数。即在main函数前面写&#xff1a;void sum(int begin, int end); C语言中&#xf…

EMC测试中的电流探头

专栏 专注介绍电磁兼容&#xff08;EMC&#xff09;的相关知识&#xff0c;算是对本人浸染 EMC 专业十余年的一个阶段小结 。 本文目录1.EMC测试中的电流探头是什么&#xff1f;2.电流探头的主要指标要求3.什么是转移阻抗&#xff1f;1.EMC测试中的电流探头是什么&#xff1f; …

校园兼职网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们、联系我们、资讯信息、企业信息、职位信息 管理员模块&#xff1a; 1、管理关于我们、联…

vTESTstudio入门到精通 - vTESTstudio工具栏介绍_File

vTESTstudio作为跟CANoe工具并套使用的一个强大的工具&#xff0c;那么想要用好它就得对他有个全面的认识&#xff0c;第一步起码要知道tade工具栏都包含哪些功能要清楚&#xff0c;今天我们就着重分享下vTESTstudio工具栏包含哪些内容&#xff0c;以便在我们编程的时候更好的去…

java 瑞吉外卖day2 笔记 员工增加 员工信息分页查询

PostMapping public R save(HttpServletRequest request,RequestBody Employee employee){log.info("新增员工&#xff1a;{}",employee);//设置初始密码123456 需要进行md5加密employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));em…

homeassistant 接入小米温湿度计2

方法可能有很多种&#xff0c;但是我只用这种方法介入成功了 环境&#xff1a; - 香橙派&#xff08;自带蓝牙&#xff0c;树莓派应该也可以&#xff09; - 小米温湿度计2 - 网站&#xff1a;Telink Flasher v4.7 、 Telink Flasher (atc1441.github.io) - 固件&#xff1…

基于java+springmvc+mybatis+vue+mysql的高校普法系统

项目介绍 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化,高校普法系统也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而…

堆排序快速排序插入排序

堆排序 数据结构使用的是1 dimension的数组来作为二叉树的堆结构&#xff0c;所以并没有使用结构体&#xff0c;而是直接使用了数组 而且堆是完全二叉树&#xff0c;也就是除了最后一层以外&#xff0c;其他层都是满二叉树&#xff0c;最后一层可能不满&#xff0c;所以1dime…

基于jeecgboot的flowable流程支持服务任务的功能

1、描述 Java服务任务用于调用外部Java类。 2、图形表示法 服务任务可视化为圆角矩形&#xff0c;左上角有一个小齿轮图标&#xff0c;如下图&#xff1a; 3、XML表示 有三种方法声明如何调用Java逻辑&#xff0c;下面分别介绍&#xff1a; 调用固定的类 使用flowable:cla…

Flask打开调试模式

调试模式 Flask支持本地开发&#xff0c;但是每次修改代码后需要手动重新启动程序&#xff0c;这不是很友好&#xff0c;事实上Flask支持调试模式来做到更好&#xff0c;Flask服务会在代码更改时自动重新加载&#xff0c;如果出现问题&#xff0c;还能提供调试器以供调试 如何…