c语言编程笔录

首页 >   > 笔记大全

笔记大全

示例演示uniapp怎么实现自定义导航栏

更新时间:2023-12-18

前言

在使用uniapp开发移动端应用时,导航栏是一个非常重要的组件。对于一些特殊的业务需求,可能需要针对导航栏进行定制化,本文将介绍如何在uniapp中实现自定义导航栏。

第一步:创建导航栏组件

首先,我们需要创建一个导航栏组件,Uniapp提供了组件化的开发方式,我们只需在pages目录下创建一个components文件夹,并在其中创建一个navbar.vue文件:

<template>
	<View class="navbar">
		<View class="leftContent">
			<slot name="left"></slot>
		</View>
		<View class="title">
			{{ title }}
		</View>
		<View class="rightContent">
			<slot name="right"></slot>
		</View>
	</View>
</template>

<script>
	export default {
		name: 'navbar',
		props: {
			title: {
				type: String,
				default: ''
			}
		}
	}
</script>

<style scoped>
	.navbar {
		display: flex;
		flex-direction: row;
		justify-content: space-between;
		align-items: center;
		height: 44px;
		background-color: #fff;
		/* 边框阴影 */
		box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 2px rgba(0, 0, 0, .08);
		/* ios下阴影去掉 */
		-webkit-appearance: none;
	}
	.leftContent,
	.rightContent {
		flex-basis: 60px;
	}
	.title {
		font-size: 18px;
		font-weight: bold;
		line-height: 44px;
		flex: 1;
		text-align: center;
	}
</style>

以上代码是一个简单的导航栏组件,由一个左侧容器,一个中间标题和一个右侧容器组成。其中,标题通过props从父组件中传递,左侧和右侧容器中的内容是在使用导航栏组件的父组件中传递过来的插槽。

第二步:在父组件中使用导航栏组件

在需要使用导航栏的页面组件中,可以通过以下方式来使用刚刚创建的导航栏组件:

<template>
	<View>
		<navbar title="自定义导航栏">
			<template v-slot:left>
				<Image class="backBtn" src="../../static/imgs/back.png" mode="aspectFit" />
			</template>
			<template v-slot:right>
				<Image class="moreBtn" src="../../static/imgs/more.png" mode="aspectFit" />
			</template>
		</navbar>
		<View class="content">
			这里是页面内容区域
		</View>
	</View>
</template>

<script>
	import navbar from '@/components/navbar.vue'

	export default {
		name: 'custom-navbar',
		components: {
			navbar
		}
	}
</script>

<style scoped>
	.backBtn {
		width: 22px;
		height: 22px;
		margin-left: 10px;
	}
	.moreBtn {
		width: 22px;
		height: 22px;
		margin-right: 10px;
	}
	.content {
		padding: 10px;
	}
</style>

以上代码中,我们在页面组件中通过<navbar>标签来使用导航栏组件,同时通过插槽的方式向导航栏组件的左侧和右侧容器中传递了两个图片组件。

第三步:在App.vue中设置导航栏全局样式

为了实现一致性和全局化,我们可以在App.vue文件中设置导航栏组件的全局样式:

.navbar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 9999;
  background-color: #fff;
}

通过以上样式设置,我们可以使导航栏组件固定在页面的顶部,并在z轴方向上最顶层。

第四步:在页面中切换导航栏样式

最后,如果我们需要在页面中针对某些特定情况定制化导航栏样式时,我们可以通过条件判断来动态设置导航栏组件的样式:

<template>
	<View>
		<navbar :title="title" :isCustom="isCustom">
			<template v-slot:left>
				<Image class="backBtn" src="../../static/imgs/back.png" mode="aspectFit" />
			</template>
			<template v-slot:right>
				<Image class="moreBtn" src="../../static/imgs/more.png" mode="aspectFit" v-if="isCustom" />
			</template>
		</navbar>
		<View class="content">
			这里是页面内容区域
		</View>
	</View>
</template>

<script>
	import navbar from '@/components/navbar.vue'

	export default {
		name: 'custom-navbar',
		components: {
			navbar
		},
		data() {
			return {
				title: '自定义导航栏',
				isCustom: false
			}
		},
		onLoad(query) {
			// 根据查询参数判断是否启用定制样式
			if (query.custom==='true') {
				this.isCustom=true
			}
		}
	}
</script>

<style scoped>
	.backBtn {
		width: 22px;
		height: 22px;
		margin-left: 10px;
	}
	.moreBtn {
		width: 22px;
		height: 22px;
		margin-right: 10px;
	}
	.content {
		padding: 10px;
	}
</style>

以上代码中,我们通过isCustom属性来控制是否启用特定的定制导航栏样式。当页面中的查询参数custom为true时,我们将启用该样式。

总结

通过以上简单的步骤,我们就可以在uniapp中实现自定义导航栏了。通过自定义导航栏样式,我们可以满足一些特殊的业务需求,提升用户体验。