uniapp - 微信小程序 - 自定义底部tabbar

废话不多说,直接行源码

这里需要的底部tabbar的图片在这里 我的资源里面呢

图片是这样的
在这里插入图片描述

先看成品吧

在这里插入图片描述




首先 - BaseApp\components\Tabbar.vue


<script setup>
	import {
		ref,
		nextTick,
		watch
	} from "vue"

	// 核心 - 隐藏uniapp自带的底部tabbar
	uni.hideTabBar()

	let current = ref(0)

	const list = ref(
		[{
			pagePath: "pages/index/index",
			iconPath: '../static/tab/11.png',
			selectedIconPath: "../static/tab/1.png",
			text: "index"
		}, {
			pagePath: "pages/warn/index",
			iconPath: '../static/tab/22.png',
			selectedIconPath: "../static/tab/2.png",
			text: "warn"
		}, {
			pagePath: "pages/my/index",
			iconPath: '../static/tab/33.png',
			selectedIconPath: "../static/tab/3.png",
			text: "my"
		}, {
			pagePath: "pages/user/index",
			iconPath: '../static/tab/44.png',
			selectedIconPath: "../static/tab/4.png",
			text: "user"
		}, {
			pagePath: "pages/sign/index",
			iconPath: '../static/tab/55.png',
			selectedIconPath: "../static/tab/5.png",
			text: "sign"
		}]
	)

	const changeTab = (e) => {
		uni.switchTab({
			url: `/${list.value[e].pagePath}`,
		})
	}

	// const props = defineProps(['current'])
	const props = defineProps({
		current: {
			type: String, // 或者其他你需要的类型  
			required: true // 如果这个 prop 是必需的  
		}
	})
	console.log('props=', props)
	current.value = props.current
</script>

<template>
	<view class="tabbar">

		<!-- 根据tabbar个数的多少, 调整.tabbar-item样式中的padding即可 -->
		<view class="tabbar-item" v-for="(item, index) in list" :key="index" @click="changeTab(index)">
			<view class="select" v-if="current == index">
				<view class="i-t">
					<image class="img imgactive" mode="widthFix" :src="item.selectedIconPath" v-if="current == index"></image>
					<image class="img" mode="widthFix" :src="item.iconPath" v-else></image>
					<view class="text active" v-if="current == index">{{item.text}}</view>
					<view class="text" v-else>{{item.text}}</view>
				</view>
			</view>
			<view v-else>
				<image class="img" mode="widthFix" :src="item.selectedIconPath" v-if="current == index"></image>
				<image class="img" mode="widthFix" :src="item.iconPath" v-else></image>
				<view class="text active" v-if="current == index">{{item.text}}</view>
				<view class="text" v-else>{{item.text}}</view>
			</view>
		</view>

	</view>
</template>

<style>
	.tabbar {
		/* 1.5vh: 视口高度的1.5% */
		font-size: 1.5vh;
		position: fixed;
		left: 0;
		bottom: 0;
		z-index: 99;
		width: 100%;
		/* 6vh: 视口高度的6% */
		height: 6vh;
		display: flex;
		align-items: center;
		justify-content: space-around;
		background-color: #fff;
		padding: 20rpx 0;
	}

	.tabbar-item {
		height: 100%;
		padding: 0 20rpx;
		/* 根据tabbar个数的多少, 调整.tabbar-item样式中的padding即可 */
		display: flex;
		align-items: center;
		justify-content: center;
	}

	.select, {
		width: 10vh;
		height: 10vh;
		/* border-radius: 10vh; */
		/* margin-bottom: 4vh; */
		/* background-color: #086d5b; */
		position: relative;
	},

	.i-t {
		font-size: 1.5vh;
		padding: 2vw 2vh;
		position: absolute;
		bottom: 1vh;
	}

	.img ,{
		height: 3vh;
		width: 2.5vh;
		/* 4vw: 视口宽度的4% */
		margin: 0 4vw;
	},

	.imgactive, {
		height: 3.5vh;
		width: 3.2vh;
		margin: 0 2.2vw;
	}

	.text {,
		text-align: center;
		color: #CACACA;
	},

	.text, .active {
		color: #fff;
	}
</style>

其次 - pages.json


{
	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
		{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "index"
			}
		}, {
			"path": "pages/warn/index",
			"style": {
				"navigationBarTitleText": "告警",
				"enablePullDownRefresh": false
			}
		}, {
			"path": "pages/my/index",
			"style": {
				"navigationBarTitleText": "我的",
				"enablePullDownRefresh": false
			}
		}, {
			"path": "pages/user/index",
			"style": {
				"navigationBarTitleText": "其他",
				"enablePullDownRefresh": false
			}
		}, {
			"path": "pages/sign/index",
			"style": {
				"navigationBarTitleText": "标签",
				"enablePullDownRefresh": false
			}
		}
	],
	"globalStyle": {
		"navigationBarTextStyle": "black",
		"navigationBarTitleText": "uni-app",
		"navigationBarBackgroundColor": "#F8F8F8",
		"backgroundColor": "#F8F8F8"
	},
	
	// 主要是这里的:tabbar -------------------------------------------------------
	"tabBar": {
		"height": "0",
		// "color": "#7A7E83",
		// "selectedColor": "#55ffff",
		// "backgroundColor": "#55ff7f",
		"list": [
			{
				"pagePath": "pages/index/index"
			},
			{
				"pagePath": "pages/warn/index"
			},
			{
				"pagePath": "pages/my/index"
			},
			{
				"pagePath": "pages/user/index"
			},
			{
				"pagePath": "pages/sign/index"
			}
		]
	},
	"uniIdRouter": {}

}

再然后 - 在别的.vue组件中这样使用

BaseApp\pages\my.vue


<template>
	<text class="title">{{title}}</text>
	
	<tabbar :current='2'></tabbar>
</template>

<script setup>
	import {
		ref
	} from 'vue'
	
	import tabbar from '../../components/Tabbar.vue'

	let title = ref('我的')
</script>

<style></style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫实战:利用代理IP批量下载哔哩哔哩美女视频

文章 目录 1.前言2.爬取目标3.准备工作3.1 环境安装3.2 代理免费获取 四、爬虫实战分析4.1 翻页分析4.2 获取视频跳转链接4.3 下载视频4.4 视频音频合并4.5 完整源码 五、总结 1.前言 粉丝们&#xff08;lsp&#xff09;期待已久的Python批量下载哔哩哔哩美女视频教程它终于来…

火绒被骂惨,良心居然也翻车?剩下3款软件还被误认为外国人开发

万万没想到&#xff0c;公认的国产良心软件“火绒”&#xff0c;居然也翻车&#xff0c;很多网友对其大失所望&#xff0c;甚至忍不住吐槽让他不要砸了自己的招牌。 事情的起因是这样的&#xff0c;火绒推出应用商店&#xff0c;并于正式公测&#xff0c;这是要逐渐走向全家桶的…

1688官方API跨境寻源通API:做外贸反向代购业务必备

item_get 获得1688商品详情item_search 按关键字搜索商品item_search_img 按图搜索1688商品&#xff08;拍立淘&#xff09;item_search_suggest 获得搜索词推荐item_fee 获得商品快递费用seller_info 获得店铺详情item_search_shop 获得店铺的所有商品item_password 获得淘口令…

WMS在发展过程中会遇到哪些挑战?

在仓库管理系统&#xff08;Warehouse Management System, WMS&#xff09;的发展过程中&#xff0c;会遇到以下一些挑战&#xff1a; 1、技术整合&#xff1a; 将WMS与现有的ERP&#xff08;企业资源计划&#xff09;、TMS&#xff08;运输管理系统&#xff09;等系统进行有效…

【日记】希望文竹长得越来越好吧(856 字)

正文 为什么昨天给老师提早说了今天上课…… 今天都要忙死了。不论上午下午都手忙脚乱。上午之前的存量客户来开新账户&#xff0c;流程卡在客户经理尽调那里。恰好那个客户经理还是部门主管&#xff0c;我们没一个人敢催。向副行长汇报情况&#xff0c;又跟客户说。客户跟他们…

通过混合栅极技术改善p-GaN功率HEMTs的ESD性能

来源&#xff1a;Improved Gate ESD Behaviors of p-GaN PowerHEMTs by Hybrid Gate Technology&#xff08;ISPSD 24年&#xff09; 摘要 本工作中&#xff0c;首次证明了混合栅极技术在不增加额外面积和寄生效应的前提下&#xff0c;能有效提升p-GaN HEMTs的栅极静电放电(E…

【C语言】函数strerror和perror详解

<>博客简介&#xff1a;Linux、rtos系统&#xff0c;arm、stm32等芯片&#xff0c;嵌入式高级工程师、面试官、架构师&#xff0c;日常技术干货、个人总结、职场经验分享   <>公众号&#xff1a;嵌入式技术部落   <>系列专栏&#xff1a;C/C、Linux、rtos、…

SpringCloud Alibaba Seata2.0分布式事务AT模式实践总结

这里我们划分订单、库存与支付三个module来实践Seata的分布式事务。 依赖版本(jdk17)&#xff1a; <spring.boot.version>3.1.7</spring.boot.version> <spring.cloud.version>2022.0.4</spring.cloud.version> <spring.cloud.alibaba.version>…

二种方法轻松提取音频中的钢琴声音

在音乐制作、音频编辑或是纯粹的音乐爱好者的世界里&#xff0c;有时我们需要从复杂的音乐编排中抽取出特定乐器的声音&#xff0c;比如那悠扬的钢琴旋律。这不仅能帮助我们更好地理解音乐的结构&#xff0c;还能在创作过程中提供灵感。本文将介绍两种简单有效的方法&#xff0…

Snipaste截图工具如何控制框线箭头的粗细程度

我们使用Snipaste截图工具的时候&#xff0c;最常用的就是框线和箭头这些功能&#xff0c;有时候感觉很粗有时候感觉太细了&#xff0c;如何解决呢&#xff1f;我们可以在使用框线或者箭头之后&#xff0c;长按1或者2来控制框线箭头的粗细程度。其中1是变细&#xff0c;2是变粗…

.NET C# 树遍历、查询、拷贝与可视化

.NET C# 树遍历、查询、拷贝与可视化 目录 .NET C# 树遍历、查询、拷贝与可视化1 组件安装1.1 NuGet包管理器安装&#xff1a;1.2 控制台安装&#xff1a; 2 接口1.1 ITree\<TTreeNode\>1.2 ITree\<TKey, TTreeNode\>1.3 IObservableTree\<TTreeNode\>1.4 IO…

推荐一本RMS包作者写的我正在追读的书《Regression Modeling Strategies》

熟悉我的粉丝都清楚&#xff0c;我很少推荐书&#xff0c;这次推荐这本书是我目前正在读的&#xff0c;这是本老书了&#xff0c;关于回归模型的&#xff0c;我觉得写的很好。 写这本书的就是RMS包的作者&#xff0c;这是他早些年写的书&#xff0c;我们可以结合他写的书来加深…

2006年上半年软件设计师【上午题】试题及答案

文章目录 2006年上半年软件设计师上午题--试题2006年上半年软件设计师上午题--答案 2006年上半年软件设计师上午题–试题 2006年上半年软件设计师上午题–答案

java启动命令与参数配置

1. java启动命令 运行一个java应用程序的语法分两种&#xff0c;分别为&#xff1a; 执行类&#xff1a;java [-options] class [args…] 执行jar文件&#xff1a;java [-options] -jar jarfile [args…] 其中 [-options] 配置 JVM参数&#xff0c;[args…] 配置 Java 运行参…

牛客链表刷题(四)

目录 一、链表的奇偶重排 代码&#xff1a; 二、删除有序链表中重复的元素-I 代码&#xff1a; 三、删除有序链表中重复的元素-II 代码&#xff1a; 一、链表的奇偶重排 代码&#xff1a; import java.util.*;/** public class ListNode {* int val;* ListNode next nu…

VisualStudio2019受支持的.NET Core

1.VS Studio2019受支持的.NET Core&#xff1f; 适用于 Visual Studio 的 .NET SDK 下载 (microsoft.com) Visual Studio 2019 默认并不直接支持 .NET 6 及以上版本。要使用 .NET 6 或更高版本&#xff0c;你需要在 Visual Studio 2019 中采取额外步骤&#xff0c;比如安装相应…

钢琴灯护眼灯怎么选比较好?五款爆款护眼大路灯推荐

钢琴灯护眼灯怎么选比较好&#xff1f;想要避免孩子在学习时眼睛视力不受影响&#xff0c;除了纠正写作姿势、带出去晒太阳、多看绿色植物舒缓眼睛疲劳之外&#xff0c;剩下的就是光环境问题&#xff0c;毕竟现在的小朋友学业越来越重&#xff0c;大部分时间不是在学校学习就是…

6.20模板

c/c/jave 静态语言强类型语言编译型语言&#xff0c;想要在运行以前就能够找出错误。 python是一个弱类型语言&#xff0c;在运行的时候再确定变量的类型。 背景需求&#xff1a;想要在强类型严格的要求下希望能够更加灵活。 有三种方式可以实现&#xff1a;宏定义&#xff…

各场景ChatGPT指令Promp提示词大全

一、Promp指令使用指南 直接复制Promp指令提示词使用 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; 支持GPTs应用Prompt自定义预设应用 SparkAi SparkAi创作系统是一款基于ChatGPT和Midjourney开发的智能问答和绘画系统&#xff…

Vue2中为啥不用 Object.defineProperty 实现响应式数组 ? 不能监听到数组变化吗?

Vue2.0 对于数据响应式的实现上是有一些局限性的&#xff0c;比如&#xff1a; 无法检测数组和对象的新增&#xff1b; 无法检测通过索引改变数组的操作&#xff1b; 针对以上问题&#xff0c;我们一般都会把锅甩给 Object.defineProperty。所以&#xff0c;在Vue 3.0 中&am…