uniapp 自定义导航栏增加首页按钮,仿微信小程序操作胶囊

实现效果如图

抽成组件navbar.vue,放入分包

javascript 复制代码
<template>
	<view class="header-nav-box"
		:style="{'height':Props.imgShow?'':statusBarHeight+'px','background':Props.imgShow?'':Props.bgColor||'#ffffff;'}">
		<!-- 是否使用图片背景 false -->
		<image v-if="Props.imgShow||false" :src="imgUrl||'../../static/flower.jpg'" mode="scaleToFill"
			style="width: 100%; height: 400rpx;" />
		<!-- 导航内容 -->
		<view class="nav-box-item" :style="{'top':capsuleTop+'px','color':Props.textColor||''}">
			<view class="back" v-if="Props.blackShow||true" >
				<uni-icons type="back" @click="back" size="18" :color="Props.iconColor||'black'" />
				<text class="line" />
				<uni-icons type="home" @click="backToHome" size="18" :color="Props.iconColor||'black'" />
			</view>
			<view class="title">
				<block>{{title}}</block>
			</view>
		</view>
		<!-- 自定义内容插槽 -->
		<slot name="content"></slot>
	</view>
</template>
 
<script>
	export default {
		name: "HeaderNav",
		data() {
			return {
              statusBarHeight:'',
			  capsuleTop:''
			};
		},
		props: {
		    height:{
				type: String,
				default: ''
			},
			Props: {
				type: Object,
				default: () => {}
			},
			title: {
				type: String,
				default: '默认标题'
			}
		},
		mounted() {
			var _self=this
			uni.getSystemInfo({
				success: function (e) {
				let custom = uni.getMenuButtonBoundingClientRect();
				  _self.statusBarHeight = custom.bottom + custom.top - (e.statusBarHeight) + 4
				},
			})
			this.capsuleTop = getApp().globalData.capsuleTop
		},
		methods: {
			// 返回按钮回调函数
			back() {
				uni.navigateBack({
					data: 1
				})
				this.$emit('back')
			},
			backToHome(){
              this.$tab.reLaunch('/pages/index') //放入自己的首页路径
			},
		}
	}
</script>
 
<style lang="scss">
	.header-nav-box {
		position: relative;
 
		.nav-box-item {
			height: 54rpx;
			position: absolute;
			display: flex;
			align-items: center;
			font-size: 34rpx;
			width: 100%;
 
			.back {
				width: 23%;
				padding: 10rpx;
				justify-content: space-around;
                display: flex;
				border-radius: 50rpx;
				// background-color: #ff8916;
				border: 1px solid rgba(0, 0, 0, .1);
			}
 
			.title {
				width: 49%;
				text-align: center;
			}
		}
	}
	.home {
		margin-left: 10rpx;
	}
	.line {
		width: 10rpx;
		height: 36rpx;
		background-color: rgba(252, 252, 252, .7);
	}
</style>

全局引用

javascript 复制代码
// 在main.js引用
// 注册全局组件
import HeaderNav from "./subPackage/navbar/index.vue" //换成你自己的组件位置
Vue.component("HeaderNav", HeaderNav)

使用

javascript 复制代码
<HeaderNav title="你自己的页面路由名称"  />
// 可以传入的参数说明
Props: {
	imgShow: "", //不传参则默认隐藏状态(false),且使用默认背景色
	statusBarHeight: "", //导航高度(动态获取传参)
	bgColor: "", //导航栏背景色,不传参则默认#9CF
	capsuleTop: "", //胶囊顶部距离(动态获取传参)
	textColor: "", //导航标题字体颜色(不传默认#FFF)
	iconColor: "", //icon图标颜色(不传默认#FFF)
	blackShow: "", //是否显示返回字体及icon图标(不传默认显示true)
	backText: "", //默认字体(返回)
},
复制代码
相关推荐
阿砾8 分钟前
微信群消息处理:回调乱序、自己发的消息、群内真实发送者
微信
小李科技18 分钟前
【性能优化】事件委托:目标定位与 React/Vue 实战
前端·vue.js·react.js·面试·性能优化·前端框架
蓝莓味的口香糖40 分钟前
【VUE】【CSS】Vue移动端适配主流方案总结
前端·css·vue.js
上火的金鱼妹1 小时前
关于多进程sse连接通知的实战
javascript·状态模式·sse
切糕师学AI1 小时前
el-select-v2 深度解析:用虚拟滚动解决海量数据下拉选择性能瓶颈
前端·vue.js·elementui·el-select-v2
承渊政道1 小时前
飞牛NAS部署Hermes AI Agent:接入DeepSeek、微信与公网访问完整教程
人工智能·微信·nas·deepseek·hermes
徐小夕1 小时前
JitOffice:把办公、AI 与审批装进同一个平台
前端·vue.js·github
徐小夕1 小时前
万字分享:为什么我们要自研Word解析引擎?JitWord 解析引擎 4.0 深度复盘
前端·vue.js·github
console.log('npc')2 小时前
问题跟踪与知识沉淀:从任务到知识的闭环)
前端·javascript·人工智能
missile1112 小时前
# HDR 算法 ISP 通路客制化方案(G100 / mt6789)
java·前端·javascript