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

废话不多说,直接行源码

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

图片是这样的

先看成品吧




首先 - BaseApp\components\Tabbar.vue

javascript 复制代码
<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

javascript 复制代码
{
	"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

javascript 复制代码
<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>
相关推荐
996幸存者5 小时前
下拉、上拉选择器 支持搜索、删除、自定义选择内容、任意对象字段映射
微信小程序·uni-app
anyup8 小时前
🔥 uView Pro 全新升级来啦!一行配置,解锁 uView Pro 全局 TS 类型提示与校验
前端·vue.js·uni-app
Ankkaya8 小时前
开发小结(08.11-08.16)
前端·uni-app
源码哥_博纳软云9 小时前
JAVA国际版多商户运营版商城系统源码多商户社交电商系统源码支持Android+IOS+H5
android·java·ios·微信·微信小程序·小程序·uni-app
Burt19 小时前
#🎉 unibest 3.11了!快来看看新增了啥~
微信小程序·uni-app
2501_915106321 天前
iOS混淆工具实战 金融支付类 App 的安全防护与合规落地
android·ios·小程序·https·uni-app·iphone·webview
TellMeha1 天前
uniapp打包app关于获取本机相机、相册、麦克风等权限问题(ios第一次安装权限列表里没有对应权限问题)
ios·uni-app
zheshiyangyang1 天前
uni-app学习【pages】
前端·学习·uni-app
小周同学:2 天前
【UniApp打包鸿蒙APP全流程】如何配置并添加UniApp API所需的鸿蒙系统权限
华为·uni-app·harmonyos
初遇你时动了情3 天前
uniapp vue3 ts自定义底部 tabbar菜单
前端·javascript·uni-app