使用 uniapp 适用于wx小程序 - 实现移动端头部的封装和调用

图例:红框区域,使其标题区与胶囊对齐

<template>
	<view class="nav_name">
		<view class="nav-title" :style="{
				'color' : props.color, 
				'padding-top' : top+'rpx',
				'background' : props.bgColor,
				'height' : tops+'rpx',
				'line-height' : tops+'rpx'
			}">
			<view v-if="props.isReturn===0" class="nav-back" @click="returns()">
				<image src="@/static/report/back_icon.png" mode=""></image>
			</view>
			<view v-else-if="props.isReturn===1" class="nav-back nav-icon" @click="returns()">
				<image :src="props.returnIcon" mode=""></image>
			</view>
			<view v-else class="nav-back"></view>
			<view class="nav-name" :style="{'text-align':props.isCenter?'center;':'left;'}">{{props.title_name}}</view>
		</view>
		<view :style="{height: top+tops+'rpx'}"></view>
	</view>
</template>
 
<script setup>
import { defineProps,ref } from 'vue'
import { onLoad, onShow } from "@dcloudio/uni-app";
const props = defineProps({
	title_name:{  // 标题名
		type:String,
		required: true
	},
	isReturn:{  // 0是返回键  1自定义传的图标 >1是不传任何图标
		type:Number,
		required: true
	},
	returnIcon:{  // 定义传递的图标地址
		type:String,
		required: true
	},
	color:{ // 文字颜色
		type:String,
		required: true
	},
	bgColor :{ // 背景颜色
		type:String,
		required: true
	},
	isCenter:{ // 文字是否居中
		type:Boolean,
		required: true
	}
})

const isLast=ref(false)
const top=ref(0)
const tops=ref(100)
const emit = defineEmits(['iconClick'])

onShow(()=>{
	getLast()
	getTopWeiXin()
})

// 返回的箭头
const returns=()=>{
	if(props.isReturn===0){
		if(isLast.value){
			uni.switchTab({
				url:'/pages/index/index' //返回首页
			})
		}else{
			uni.navigateBack({
				delta: 1  //返回上一页
			});
		}
	}else if(props.isReturn===1){
		// 自定义图标操作
		emit('iconClick')
	}
}
// 获取小程序安全区域的高度
const getTopWeiXin=()=>{
	top.value = parseInt(uni.getSystemInfoSync().safeAreaInsets.top * 750 / uni.getSystemInfoSync().windowWidth) 
	uni.setStorageSync('top', top.value);
}
// 获取有无上一页
const getLast=()=>{
	let pages = getCurrentPages();//当前页
	if(pages.length == 1){
		isLast.value = true
	}else{
		isLast.value = false
	}
}
</script>
 
<style lang="scss" scoped>
.nav_name{
	.nav-title{
		position: fixed;
		z-index: 999;
		width: 750rpx;
		display: flex;
		align-items: center;
		justify-content: center;
		text-align: center;
		overflow: hidden;
		.nav-back{
			width: 60rpx;
			position: absolute;
			left: 0;
			z-index: 999;
			margin-left: 20rpx;
			margin-top: 8rpx;
			image{
				width: 36rpx;
				height: 36rpx;
			}
		}
		.nav-icon{
			margin-top: 20rpx;
			image{
				width: 46rpx !important;
				height: 46rpx !important;
			}
		}
		.nav-name{
			width: 560rpx;
			text-align: center;
			font-weight: bold;
			white-space: nowrap;
			text-overflow: ellipsis;
			overflow: hidden;
			word-break: break-all;
		}
	}
}
</style>

二、页面调用

<template>
<Navigation :title_name="'6-25考试新增学生测试'"
        :isReturn="0"
        :color="'#000000'"
        :bgColor="'#FFFFFF'"
		:isCenter="false"/>
</template>
<script setup>
import Navigation from '@/components/navigation/index.vue'
</script>

三、pages.json 相关设置

// 如果背景色是白色, 需要设置 pages.json 中顶部文字颜色为黑色,显示手机自带的信息

"globalStyle": {
	"navigationBarTextStyle": "black",
	"navigationBarTitleText": "远端小程序",
	"navigationBarBackgroundColor": "#F8F8F8",
	"backgroundColor": "#F8F8F8"
}

希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

相关推荐
Marry1.03 分钟前
uniapp背景图用本地图片
前端·uni-app
夏河始溢8 分钟前
一七八、Node.js PM2使用介绍
前端·javascript·node.js·pm2
记忆深处的声音9 分钟前
vue2 + Element-ui 二次封装 Table 组件,打造通用业务表格
前端·vue.js·代码规范
陈随易10 分钟前
兔小巢收费引发的论坛调研Node和Deno有感
前端·后端·程序员
熊的猫24 分钟前
webpack 核心模块 — loader & plugins
前端·javascript·chrome·webpack·前端框架·node.js·ecmascript
速盾cdn31 分钟前
速盾:vue的cdn是干嘛的?
服务器·前端·网络
四喜花露水1 小时前
Vue 自定义icon组件封装SVG图标
前端·javascript·vue.js
前端Hardy1 小时前
HTML&CSS: 实现可爱的冰墩墩
前端·javascript·css·html·css3
chaosama1 小时前
禁止uni小程序ios端上下拉伸(橡皮筋效果)
ios·小程序
瑶琴AI前端2 小时前
uniapp实现H5和微信小程序获取当前位置(腾讯地图)
微信小程序·小程序·uni-app