微信小程序自定义tabbar;禁用某个tab;修改某个tab的样式

news2024/12/22 10:49:25

微信小程序自定义tabbar;禁用某个tab;修改某个tab的样式

原本使用本身的tabBar就已经很舒服了,很合适了的,但是总有一些脑洞大开的产品和客户,给你搞点多样式,没办法牛马就得去做咯,现在就给大家说说这个自定义tabbar的做法

无论使用uniapp开发微信小程序还是原生微信小程序的开发,都建议使用微信小程序本身的自定义tabbar组件来进行开发,连uniapp官网都说了使用这个自带的组件custom-tab-bar

微信小程序自定义tabbar组件文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html

在这里插入图片描述

可以看到,如果使用uniapp开发,可以直接使用custom-tab-bar,uniapp编辑器会自动把这个组件给复制过去,可以安心使用。

一、获取custom-tab-bar

打开上面的组件文档,找到下面的示例代码位置,点击预览效果,然后把打开的代码里面的组件(四个文件都要过去,直接把文件夹custom-tab-bar复制就好了)复制你的项目的根目录上面

在这里插入图片描述

在这里插入图片描述

二、配置新项目

在这里插入图片描述

我是在每个tab页进行添加的,

{
    "page":[
        {
			"path": "page/component/index",
			"style": {
				"navigationBarTitleText": "tab1",
				"enablePullDownRefresh": false,
				"navigationStyle": "custom"
			},
			"usingComponents": {} //------------修改点1
		},
        .......
    ],
  "tabBar": {
    "custom": true, //----------------------------------------修改点2
    "color": "#000000",
    "selectedColor": "#000000",
    "backgroundColor": "#000000",
    "list": [{
      "pagePath": "page/component/index",
      "text": "tab1"
    }, {
      "pagePath": "page/API/index",
      "text": "tab2"
    },
    {
      "pagePath": "page/API/index",
      "text": "tab3"
    }
   ]
  },
}

还有一个很大的坑,在官网里面没有体现出来,但是不加的话,你就会发现你点击tab每次高显的都不是你的点击的tab。那就是要在每一个tab的页面加上以下的代码

if (typeof this.$mp.page.getTabBar === 'function' && this.$mp.page.getTabBar()) {
	  	this.$mp.page.getTabBar().setData({
	  		selected: 0 //对应是那个页面就是多少  0 1 2 3,写死
	  	})
		this.$mp.page.getTabBar().init();//这是我为了触发非tab页面进来tab页面的时候custom-tab-bar组件没有刷新
}

三、修改custom-tab-bar

实现不同权限来进行展示不同的tab,写法比较直接。修改组件的index.js

Component({
	data: {
		selected: 0,
		color: "#ccc",
		selectedColor: "3333cc",
		backgroundColor: "#ffffff",
		list: [{
                "pagePath": "index/index",
                "iconPath": "image/icon_component.png",
                "selectedIconPath": "image/icon_component_HL.png",
                "text": "组件"
              },
              {
                "pagePath": "index/index2",
                "iconPath": "image/icon_API.png",
                "selectedIconPath": "image/icon_API_HL.png",
                "text": "接口"
              },
              {
                "pagePath": "tab1/tabOne",
                "iconPath": "image/icon_API.png",
                "selectedIconPath": "image/icon_API_HL.png",
                "text": "切换"
              }
		],
		resultStataus: false,
	},
	attached() {
		this.init();
	},
	methods: {
		switchTab(e) {
			const data = e.currentTarget.dataset
			const url = data.path
			if (url == 'index/index') {//-------------------禁止某个页面被点击;如果你不想list被减少,只是想禁用可以这样使用
				if (this.data.resultStataus) {
					return
				}
			}
			wx.switchTab({
				url
			})
			this.setData({
				selected: data.index
			})
		},
		init() {
			try {
				var userInfo = wx.getStorageSync('loginInfo')
				if (userInfo) {
					let type = JSON.parse(userInfo).type
					let result = type == 1 ? true:false;  //根据不同的用户角色
					console.log('用户角色', result);
					this.setData({
						resultStataus: result
					})
					if (result) {
                        //少一个tab
						this.setData({
							list: [{
                                        "pagePath": "index/index",
                                        "iconPath": "image/icon_component.png",
                                        "selectedIconPath": "image/icon_component_HL.png",
                                        "text": "组件"
                                      },
                                      {
                                        "pagePath": "index/index2",
                                        "iconPath": "image/icon_API.png",
                                        "selectedIconPath": "image/icon_API_HL.png",
                                        "text": "接口"
                                      },
							]
						})
					} else {
                        //建议为false的时候也要把tablist再赋值一次,不然怕你切换登录的时候会导致页面有缓存没有更新list
						this.setData({
							list: [{
                                        "pagePath": "index/index",
                                        "iconPath": "image/icon_component.png",
                                        "selectedIconPath": "image/icon_component_HL.png",
                                        "text": "组件"
                                      },
                                      {
                                        "pagePath": "index/index2",
                                        "iconPath": "image/icon_API.png",
                                        "selectedIconPath": "image/icon_API_HL.png",
                                        "text": "接口"
                                      },
                                      {
                                        "pagePath": "tab1/tabOne",
                                        "iconPath": "image/icon_API.png",
                                        "selectedIconPath": "image/icon_API_HL.png",
                                        "text": "切换"
                                      }
							]
						})
					}
				}
			} catch (e) {

			}
		}
	}
})

如果你要禁用某一个tab就可以在点击tab里面加一个判断

if (url == 'index/index') {//-------------------禁止某个页面被点击;如果你不想list被减少,只是想禁用可以这样使用
    if (this.data.resultStataus) {
        return
    }
}
wx.switchTab({
    url
})

如果你想把禁用的这个tab,把图标置灰,文字颜色也进行修改

//图标置灰,最直接方法就是上面判断用户类型赋值list的时候,换一个在图标
{
    {
        "pagePath": "tab1/tabOne",
        "iconPath": "image/icon_API_none.png", //  ---------------直接换图标
        "selectedIconPath": "image/icon_API_HL.png",
        "text": "切换"
      }
}
//修改文字颜色。在组件的index.wxml的页面直接加判断
<view style="color: {{(index == 1 && resultStataus)?'#C9CDD4':(selected === index ? selectedColor : color)}}">{{item.text}}</view>
// index == 1  你想要处理的tab的下标
// 是否要修改tab的判断  resultStataus  true  false  看上面的代码

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

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

相关文章

操作系统——内存段式和段页式管理

目录 一、为什么要有段式管理&#xff1f; 二、段式管理的实现原理 1、段式虚拟空间 2、段式管理的内存分配与释放 3、段式管理的地址变换 &#xff08;1&#xff09;段表 &#xff08;2&#xff09;动态地址变换 4、段的共享与保护 &#xff08;1&#xff09;共享 &a…

【C#设计模式(10)——装饰器模式(Decorator Pattern)】

前言 装饰器模式可以在运行时为对象添加额外的功&#xff0c;而无需修改原始对象的代码。这种方式比继承更加灵活。 代码 //蛋糕类&#xff08;抽象类&#xff09; public abstract class Cake {public abstract void Create(); } //奶油蛋糕类 public class CreamCake : Cak…

千图网 AI 绘画平台——智能图像创作工具

抖知书老师推荐&#xff1a; ​千图网的AI图像处理工具已经上线有一段时间了&#xff0c;随着AI技术的不断提升&#xff0c;越来越多的设计师和创意工作者开始接受并使用这个高效的工具。最初对于AI会影响创作行业的担忧&#xff0c;现在也逐渐消散了。设计师们依然在创造&…

【前端】技术演进发展简史

一、前端 1、概述 1990 年&#xff0c;第一个web浏览器诞生&#xff0c;Tim 以超文本语言 HTML 为基础在 NeXT 电脑上发明了最原始的 Web 浏览器。 1991 年&#xff0c;WWW诞生&#xff0c;这标志着前端技术的开始。 前端&#xff08;Front-end&#xff09;和后端&#xff08;…

【C#设计模式(4)——构建者模式(Builder Pattern)】

前言 C#设计模式(4)——构建者模式(Builder Pattern) 运行结果 代码 public class Computer {private string part1 "CPU";private string part2 "主板";private string part3 "内存";private string part4 "显卡";private st…

android studio导入OpenCv并改造成.kts版本

1.下载opencv Android版本 2.解压导入android studio,我这里是先导入低版本的,还是gradle,直接导入module,我这里是4.2.0的版本 我的as版本是Android Studio Electric Eel 2022.1.1 Patch 2,我导入直接就能用 //load OpenCV engine and init OpenCV library //这里放在oncreat…

【easily-openJCL】要尝试下用 显卡 做数据对称加密吗?

easily-openJCL 要尝试下用 显卡 做数据对称加密吗&#xff1f; 开源技术栏 本文演示了一个案例&#xff0c;使用显卡进行数据加密哦&#xff0c;加密方法是 XOR 目录 文章目录 easily-openJCL 要尝试下用 显卡 做数据对称加密吗&#xff1f;目录开始导入项目库加密操作解密…

挖到宝了!统一dlp数据防泄漏解决方案有哪些?千字长文带你熟知这6款!

信息外泄、内部疏忽、离职泄密、黑客入侵、系统漏洞、第三方风险&#xff0c;这些司空见惯的企业数据泄漏问题&#xff0c;无一不牵动着企业的神经&#xff0c;考验着企业的数据安全防线。 今天&#xff0c;我们就来深挖几款统一dlp数据防泄漏解决方案&#xff0c;帮助企业筑起…

wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 wflow-web是一个开源的工作流设计器&#xff0c;它支持可视化拖拽表单组件&#xff0c;动态任意层级结构审批节点&#xff0c;以及复杂流程条件的设置…

VUE3实现好看的世界建筑中国建筑网站源码

文章目录 1.设计来源1.1 网站主界面1.2 登录界面1.3 注册界面1.4 特色建筑展览界面1.5 世界建筑介绍界面1.6 世界建筑介绍 - 详情界面1.7 中国建筑介绍界面1.8 中国建筑介绍 - 详情界面1.9 关于我们界面 2.效果和源码2.1 动态效果2.2 源代码2.3 目录结构 源码下载万套模板&…

Flink新版Source接口源码解析

目录 1. 前言 2. Source解析 2.1 Source类图 2.2 接口和方法说明 2.2.1 Source,> 3. SplitEnumerator解析 3.1 SplitEnumetator类图 3.2 类和方法说明 3.2.1 SplitEnumerator 3.2.2 SimpleVersionedSerializer 4. SourceReader解析 4.1 SourceReader类图 4.2 类…

SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性

介绍 Spring Cloud Gateway 根据请求的路径、HTTP 方法、头部等信息&#xff0c;将请求路由到对应的微服务实例。它支持基于动态路由规则的配置&#xff0c;可以根据请求的 URL、查询参数、请求头等条件&#xff0c;灵活地决定将请求转发到哪个微服务。Spring Cloud Gateway 提…

【老白学 Java】你能想到「封装」说明有点专业

你能想到「封装」说明有点专业 文章来源&#xff1a;《Head First Java》修炼感悟。 上一章&#xff0c;师兄们能否理解对象属性的相互关系&#xff1f; 本章老白想聊聊数据安全的问题&#xff0c;毕竟谁都不想把自己的数据暴露于大庭广众之下。 如果那样的话将毫无隐私可言&a…

chat2db调用ollama实现数据库的操作。

只试了mysql的调用。 其它的我也不用&#xff0c;本来想充钱算了。最后一看单位是美刀。就放弃了这分心。于是折腾了一下。 本地运行chat2db 及chat2db ui https://gitee.com/ooooinfo/Chat2DB clone 后运行起来 chat2db的java端&#xff0c;我现在搞不清这一个项目是有没有…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

qt中ctrl+鼠标左键无法进入

现象&#xff1a;qt中ctrl鼠标左键无法跳转部分函数&#xff0c;例如能跳到textEdit->toPlainText().&#xff0c;但无法跳转到toUtf8();但编译没有问题 排查1&#xff1a;我发现是交叉编译链的问题&#xff0c;使用linux自带就可以进&#xff0c;用ATK-I.MX6U就部分不能进…

Android gradle下载失败后 解决方案

Android 导入gradle一直失败&#xff0c;更新gradle源即可 比如项目里默认的是 distributionUrlhttps\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 用下面这个来替换distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip

基于Java Springboot餐厅点餐系统(加入商家版)

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL5.7…

开源项目推荐——OpenDroneMap无人机影像数据处理

实景三维作为GIS最火的课题&#xff0c;最近在想做一套自己的三维构建工具&#xff0c;考察了几个开源项目&#xff0c;把自己的搜索过程用csdn记录下来&#xff0c;希望也能帮助到各位同仁。 OpenDroneMap&#xff08;ODM&#xff09;是一个开源项目&#xff0c;旨在处理无人…

手动安装Ubuntu系统中的network-manager包(其它包同理)

自己手闲把系统中的network-manager包给删了&#xff0c;导致的结果就是Ubuntu系统彻底没有网络。结果再装network-manager时&#xff0c;没有网络根本装不了&#xff0c;网上的方法都试了也没用&#xff0c;然后就自己源码装&#xff0c;这篇文章就是记录一下怎么手动下载包然…