uniapp 封装 navbar tabbar

news/2024/7/20 1:31:00 标签: uni-app, javascript, 微信小程序, 小程序, css, vue.js, sass

最近换了一家公司工作

因为上家公司老板给的钱不多 还特别会压榨员工

好了好了,不扯皮了

1、封装navbar:

首先需要在pages.json中将对应页面的原生navbar给取消

举例:

{
	"pages": [
		{
		    "path" : "pages/home/index/index",
			"style" :
			{
			    "navigationBarTitleText": "",
				"navigationBarBackgroundColor": "#2EC461",
				"navigationBarTextStyle": "white",
				"navigationStyle": "custom" //取消原生的navbar,即自定义navbar
			}
		}
    ]
}

然后新建一个vue页面文件,进行编写:

<template>
	<uni-nav-bar shadow fixed status-bar background-color="#2EC461" color="#FFF" leftWidth="180rpx" right-width="180rpx">
		<template #left>
			<view>
				<location></location> <!--封装的另一个组件不用管它-->
			</view>
		</template>
		<template #default>
			<view class="navTitle flex-row-centerAll PingFangFont">
				<slot name="title"></slot>
			</view>
		</template>
	</uni-nav-bar>
</template>

<script setup>
	import location from "../location/location"
</script>

<style lang="scss" scoped>
	.navTitle{
		width: 100%;
		height: 100%;
		font-size: 36rpx;
		text-align: center;
		font-weight: bolder;
	}
</style>

然后在需要用到的页面中进行引入:

<template>
	<view>
		<navbar>
            <!--对应封装的navbar组件中的title slot插槽-->
			<template slot="title">
				<view>
					页面标题
				</view>
			</template>
		</navbar>
	</view>
</template>

<script setup>
	import navbar from "../../../components/navbar/navbar"
</script>

<style>
</style>

效果如下: 

 2.封装tabbar组件,新建tabbar.vue组件

<template>
	<view class="tab">
		<view class="navView" @tap="switc('/pages/home/index/index')">
			<image :src="tabname ==='home'?'/static/tabbar/home_selected.png':'/static/tabbar/home.png'" class="navView-img"/>
			<view :class="tabname ==='home'?'tabTextActive':'tabText'">棣栭〉</view>
		</view>
		<view class="navView" @tap="switc('/pages/my/my')">
			<image :src="tabname ==='my'?'/static/tabbar/my_selected.png':'/static/tabbar/my.png'" class="navView-img"/>
			<view :class="tabname ==='my'?'tabTextActive':'tabText'">鎴戠殑</view>
		</view>
	</view>
</template>

<script setup>
import { onMounted } from "vue";
	defineProps({
		tabname:{
			type:String,
			default:'home'
		}
	})
	const switc = (val) => {
		if(!val)return;
		uni.switchTab({url:val})
	}
	onMounted(() => {
		uni.hideTabBar() //隐藏原生的tabbar
	})
</script>

<style lang="scss" scoped>
	.tab{
		position: fixed;
		bottom: 0;
		left: 0;
		display: flex;
		z-index: 1;
		align-items: center;
		width: 100%;
		height: 120rpx;
		background: #fff;
		box-shadow: 0rpx 0rpx 16rpx #999;
		.navView{
			flex: 1;
			text-align: center;
			font-size: 0;
			.navView-img{
				width: 48rpx;
				height: 48rpx;
				margin-bottom: 6rpx;
			}
			.tabText{
				font-size: 26rpx;
				color: #999;
			}
			.tabTextActive{
				font-size: 26rpx;
				color: #333333;
			}
		}
	}
</style>





然后在tabbar页面进行引入

<template>
	<view>
		<navbar>
			<template slot="title">
				<view>
					善星球
				</view>
			</template>
		</navbar>
		<tabbar tabname="home"></tabbar>
	</view>
</template>

<script setup>
	import navbar from "../../../components/navbar/navbar"
	import tabbar from "../../../components/tabbar/tabbar"
</script>

<style>
</style>

看效果:

特地在样式里面加入了盒子阴影进行区分


http://www.niftyadmin.cn/n/475565.html

相关文章

Mysql索引优化(二)

脑图链接 表数据可以去看&#xff1a;Mysql索引优化&#xff08;一&#xff09; 一、分页查询优化 select * from employees limit 10000,10;从表 employees 中取出从 10001 行开始的 10 行记录。需要返回 10 条记录&#xff0c;实际这条 SQL 是先读取 10010 条记录&#xff…

vue3进阶-----单文件组件

目录 三.vue3进阶 1.单文件组件 1-1组件定义-重塑经脉&#xff0c;断了&#xff1f; 1-2单文件组件(SFC)-独立日 1-3Vue-CLI创建项目-锅灶升级 1-4 vuecli选项介绍 1-5 VueCLI创建项目-风云再起 index.html main.js 作用 ES6 导入 导出 解决跨域之“Vue-Cli配置跨域…

Leetcode 刷题 动态规划

70. 爬楼梯 爬楼梯问题其实是一个完全背包问题&#xff01; 是求一个排列问题 所以遍历顺序 需将target放在外循环&#xff0c;将nums放在内循环。 class Solution {public int climbStairs(int n) {int[] dp new int[n 1];dp[0] 1;int[] step new int[2];step[0] 1;s…

python命名规范

Python命名规范 命名原则 1、不能以数字开头&#xff0c;不能出现中文。 2、命名以字母开头&#xff0c;包含数字&#xff0c;字母&#xff08;区分大小写&#xff09;&#xff0c;下划线。 3、不能包含关键字。 1、项目名称 首字母大写大写式驼峰&#xff0c;如&#xff1…

JavaScript代理模式:如何实现对象的动态代理

JavaScript代理模式 在JavaScript中&#xff0c;代理模式是一种常见的设计模式&#xff0c;它允许我们在不改变对象本身的情况下&#xff0c;通过代理对象来控制对象的访问。代理模式可以用于实现缓存、权限控制、远程调用等功能。 代理模式的定义 代理模式是指在访问对象时…

【微服务架构设计和实现】4.9 微服务测试和部署最佳实践

往期回顾&#xff1a; 第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;【容器化应用程序设计和开发】 第三章&#xff1a;【基于容器的部署、管理和扩展】 第四章&#xff1a;【4.1 微服务架构概述和设计原则】 第四章&#xff1a;【4.2 服务边界的定义和划分…

升级HarmonyOS 3,通话一步切换更便捷

小伙伴们&#xff0c;今天和大家来聊聊HarmonyOS 3音频播控中心有哪些真香体验。不少朋友可能会脱口而出&#xff1a;一键切换音频App&#xff0c;一键实现音频跨设备流转&#xff0c;还有音频共享。这一次&#xff0c;音频播控中心又带来了新技能——一键切换通话音频。 相信大…

高速电路设计系列分享-熟悉JESD204B(中)

目录 概要 整体架构流程 技术名词解释 技术细节 1.数据链路层 小结 概要 提示&#xff1a;这里可以添加技术概要 随着高速ADC跨入GSPS范围&#xff0c;与FPGA(定制ASIC)进行数据传输的首选接口协JESD204B。为了捕捉频率范围更高的RF频谱&#xff0c;需要宽带RFADC。在其推动下…