uni-app自定义微信小程序头部导航栏

目录

一、子组件代码

1、完整子组件代码 

2、子组件配置项Props 

二、父组件引用代码 

1 、将头部导航注册成全局组件(main.js)

2、获取设备信息(App.vue)

3、页面导入自定义导航组件

(3-1)、默认配置效果图例

(3-2)、更改配置效果图例 



一、子组件代码

1、完整子组件代码 
<template>
	<view class="header-nav-box"
		:style="{'height':Props.imgShow?'':Props.statusBarHeight+'px','background':Props.imgShow?'':Props.bgColor||'#9cf'}">
		<!-- 是否使用图片背景 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':Props.capsuleTop+'px','color':Props.textColor||'#FFF'}">
			<view class="back" v-if="Props.blackShow||true" @click="back">
				<uni-icons type="back" size="18" :color="Props.iconColor||'#FFF'" />
				<block>{{Props.backText||'返回'}}</block>
			</view>
			<view class="title">
				<block>{{title}}</block>
			</view>
		</view>
		<!-- 自定义内容插槽 -->
		<slot name="content"></slot>
	</view>
</template>

<script>
	export default {
		name: "HeaderNav",
		data() {
			return {};
		},
		props: {
			Props: {
				type: Object,
				default: () => {}
			},
			title: {
				type: String,
				default: '默认标题'
			}
		},
		methods: {
			// 返回按钮回调函数
			back() {
				uni.navigateBack({
					data: 1
				})
				this.$emit('back')
			}
		}
	}
</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: 25%;
				padding-left: 10rpx
			}

			.title {
				width: 49%;
				text-align: center;
			}
		}
	}
</style>
2、子组件配置项Props 
//配置项
Props:{
imgShow: "", //不传参则默认隐藏状态(false),且使用默认背景色
statusBarHeight: "", //导航高度(动态获取传参)
bgColor: "", //导航栏背景色,不传参则默认#9CF
capsuleTop: "", //胶囊顶部距离(动态获取传参)
textColor: "", //导航标题字体颜色(不传默认#FFF)
iconColor: "", //icon图标颜色(不传默认#FFF)
blackShow: "", //是否显示返回字体及icon图标(不传默认显示true)
backText: "", //默认字体(返回)
},
title:"默认标题"//导航标题内容(不传则为默认内容)

 大家可根据自身项目的业务进行更改,合理使用,参考写出与自身项目中相符合的写法。也可在配置项中增加自己的想法,或删减自己认为多余的部分,一切根据自己的想法逻辑去实现,我这个只是提供一个自己所理解的参考写法。

二、父组件引用代码 

1 、将头部导航注册成全局组件(main.js)

 组件名称可自行命名“HeaderNav”

// 注册全局组件
import HeaderNav from "@/components/HeaderNav"
Vue.component("HeaderNav", HeaderNav)
2、获取设备信息(App.vue)
<script>
	export default {
		globalData: {
			statusBarHeight: "", //导航栏高度
			capsuleTop: "", //胶囊距离顶部位置
			capsuleHeight: "", //胶囊高度
		},
		onLaunch: function() {
			let custom = uni.getMenuButtonBoundingClientRect() //获取右上角胶囊信息
			let system = uni.getSystemInfoSync() //获取设备信息
			this.globalData.statusBarHeight = system.statusBarHeight + system.safeArea.top
			this.globalData.capsuleTop = custom.top
		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		}
	}
</script>

<style>
	/*每个页面公共css */
</style>

3、页面导入自定义导航组件

 当前为默认导入子组件(配置项参数为进行任何更改)状态,默认使用背景色#9CF,可自行根据业务需求更改背景色或渐变背景色

<template>
	<view id="container">
		<HeaderNav :Props="Props" @black="black" />
	</view>
</template>

<script>
	export default {
		data() {
			return {
				Props: {
					imgShow: "", //不传参则默认隐藏状态(false),且使用默认背景色
					statusBarHeight: "", //导航高度(动态获取传参)
					bgColor: "", //导航栏背景色,不传参则默认#9CF
					capsuleTop: "", //胶囊顶部距离(动态获取传参)
					textColor: "", //导航标题字体颜色(不传默认#FFF)
					iconColor: "", //icon图标颜色(不传默认#FFF)
					blackShow: "", //是否显示返回字体及icon图标(不传默认显示true)
					backText: "", //默认字体(返回)
				}
			}
		},
		onLoad() {
			this.Props.statusBarHeight = getApp().globalData.statusBarHeight
			this.Props.capsuleTop = getApp().globalData.capsuleTop
		},
		methods: {
			black() {
				console.log("返回上一页回调事件");
			}
		}
	}
</script>

<style lang="scss" scoped>
	#container {}
</style>
(3-1)、默认配置效果图例

(3-2)、更改配置效果图例 

使用背景图头部导航效果 ,仅配置部分参数,剩余参数配置根据需求配置,部分配置项代码如下;

<HeaderNav :title="title" :Props="Props" @black="black" />
title: "我的导航",
Props: {
	imgShow: true, //不传参则默认隐藏状态(false),且使用默认背景色
	statusBarHeight: "", //导航高度(动态获取传参)
    bgColor: "", //导航栏背景色,不传参则默认#9CF
    capsuleTop: "", //胶囊顶部距离(动态获取传参)
    textColor: "", //导航标题字体颜色(不传默认#FFF)
    iconColor: "", //icon图标颜色(不传默认#FFF)
    blackShow: "", //是否显示返回字体及icon图标(不传默认显示true)
    backText: "后退", //默认字体(返回)
}

完成上述步骤,即可得到一个简易的头部导航子组件的封装啦,大家可根据自己项目需求更改,直接copy即可使用,简单易上手。傻瓜式写法!!!各位大佬小声喷哈,哈哈哈哈。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在uniapp自定义微信小程序导航栏,你可以按照以下步骤进行操作: 1. 在 `App.vue` 中添加 `onLaunch` 方法,用于获取设备信息: ``` onLaunch: function() { uni.getSystemInfo({ success: function(res) { uni.$systemInfo = res; } }); } ``` 2. 在 `pages.json` 中添加 `navigationStyle` 属性,用于设置导航栏样式为自定义: ``` { "pages": [ { "path": "pages/home/home", "style": { "navigationStyle": "custom" } } ] } ``` 3. 在需要自定义导航栏的页面中,添加一个自定义导航栏组件: ``` <template> <view class="custom-navigation-bar"> <view class="custom-navigation-bar-left" @click="back"> <image src="/static/arrow_left.png" mode="widthFix" /> </view> <view class="custom-navigation-bar-title">{{title}}</view> </view> </template> <script> export default { props: { title: { type: String, default: '' } }, methods: { back() { uni.navigateBack({ delta: 1 }); } } }; </script> <style scoped> .custom-navigation-bar { position: fixed; top: 0; left: 0; width: 100%; height: uni.$systemInfo.statusBarHeight + 44px; background-color: #fff; display: flex; align-items: center; justify-content: space-between; padding: 0 16px; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); z-index: 999; } .custom-navigation-bar-left { width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; } .custom-navigation-bar-title { font-size: 18px; font-weight: bold; color: #333; text-align: center; } </style> ``` 4. 在需要自定义导航栏的页面中,引入自定义导航栏组件,并将页面标题传入组件中: ``` <template> <view> <custom-navigation-bar title="自定义导航栏"></custom-navigation-bar> <view class="content">页面内容</view> </view> </template> <script> import CustomNavigationBar from '@/components/CustomNavigationBar'; export default { components: { CustomNavigationBar } }; </script> <style scoped> .content { margin-top: uni.$systemInfo.statusBarHeight + 44px; padding: 16px; } </style> ``` 这样,你就可以在uniapp微信小程序自定义导航栏了。需要注意的是,在自定义导航栏组件中,需要通过 `uni.$systemInfo.statusBarHeight` 获取状态栏高度,并根据状态栏高度调整自定义导航栏的高度和位置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XINGZI前端程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值