当前位置: 首页 > article >正文

uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)

一. 创建一个hooks

        hooks—>useSystemBar.js

二. useSystemBar.js

       其中// #ifdef MP-WEIXIN 不是注释 这是uni-app的写法         

import {ref} from 'vue';

export default function() {
	// 获取系统信息
	let systemInfo = '';
	// #ifdef MP-WEIXIN
		systemInfo = uni.getWindowInfo(); 
	// #endif
	// #ifndef MP-WEIXIN
		systemInfo = uni.getSystemInfoSync();
	// #endif
	
	// 获取刘海-状态栏高度
	let StatusBarHeight = systemInfo.statusBarHeight || 15;
	
	
	// 获取title-自定义内容高度
	let TitleBarHeight = '';
	if(uni.getMenuButtonBoundingClientRect){
		let {top,height} = uni.getMenuButtonBoundingClientRect();
		TitleBarHeight = height + (top - StatusBarHeight)*2		
	}else{
		TitleBarHeight = 40;
	}
	
	// 占位高度-胶囊离下面内容高度
	let NavBarHeight = StatusBarHeight + TitleBarHeight;
	
	// 判断是否是头条
	let ttLeftIconLeft = '';		// 头条胶囊左侧有一个固定的图标,所以要获取图标加图标左侧间距的距离
	// #ifdef MP-TOUTIAO
		let {leftIcon:{left,width}}  = tt.getCustomButtonBoundingClientRect();
		ttLeftIconLeft = left+ parseInt(width);
	// #endif
	// #ifndef MP-TOUTIAO
		ttLeftIconLeft = 0;
	// #endif
	
	
	return {
		StatusBarHeight,
		TitleBarHeight,
		NavBarHeight,
		ttLeftIconLeft
	}
}

三. 使用

       在需要页面上使用 下面这个文件是我的项目头部封装 你可以在titleBar标签内写自己的业务逻辑, 并且你拿到StatusBarHeight, TitleBarHeight, NavBarHeight, ttLeftIconLeft这四个值, 你就可以随意操作了

<template>
	<!-- bar -->
	<view class="layout">
		<view class="navbar">
			<!-- 刘海位置-状态栏 -->
			<view class="statusBar" :style="{height: StatusBarHeight + 'px'}"></view>
			<!-- 自己内容位置 -->
			<view class="titleBar" :style="{height:TitleBarHeight+'px',marginLeft:ttLeftIconLeft + 'px'}">
				<view class="title">{{ title }}</view>
				<view class="search">
					<uni-icons class="icon" type="search" color="#888" size="18"></uni-icons>
					<text class="text">搜索</text>
				</view>
			</view>
		</view>
		<!-- 占位 -->
		<view class="fill" :style="{height:NavBarHeight +'px'}"></view>
	</view>
</template>

<script setup>
	defineProps({
		title: {
			type:String,
			default:"壁纸"
		}
	})
	
	// hooks
	import useSystemBar from '../../hooks/useSystemBar';
	const { StatusBarHeight, TitleBarHeight, NavBarHeight, ttLeftIconLeft } = useSystemBar();
	
	
</script>

<style lang="scss" scoped>
.layout{
	.navbar{
		position: fixed;
		top:0;
		left:0;
		width: 100%;
		z-index: 10;
		background:
		linear-gradient(to bottom,transparent,#fff 400rpx),
		linear-gradient(to right,#beecd8 20%,#F4E2D8);
		.statusBar{}
		.titleBar{
			display: flex;	
			align-items: center;
			padding:0 30rpx;
				
			.title{
				font-size: 44rpx;
				font-weight: 700;
				color: $text-font-color-1;
			}
			.search{
				  width: 220rpx;
				  height: 60rpx;
				  border-radius: 60rpx;
				  background: rgba(255,255,255,0.4);
				  margin-left:30rpx;
				  color:#999;
				  font-size: 28rpx;
				  display: flex;
				  align-items: center;
				  .icon{
					  margin-left:5rpx;
				  }
				  .text{
					  padding-left:10rpx;
				  }
			}
		}
	}
	.fill{
		
	}
}
</style>


http://www.kler.cn/a/390550.html

相关文章:

  • 数据分析思维(十一):应用篇——用数据分析解决问题
  • openCvSharp 计算机视觉图片找茬
  • 研究线段树的最大子段和
  • Python实现windows自动关机
  • java_将数据存入elasticsearch进行高效搜索
  • C#基础-区分数组与集合
  • 微信小程序原生 canvas画布截取视频帧保存为图片并进行裁剪
  • 24/11/12 算法笔记<强化学习> Policy Gradient策略梯度
  • IT运维的365天--019 用php做一个简单的文件上传工具
  • go 下划线 _ 被称为“空白标识符
  • 【Lucene】全文检索 vs 顺序扫描,为何建立索引比逐个文件搜索更高效?
  • 第 4 章 - Go 语言变量与常量
  • 构造函数原型对象语法、原型链、原型对象
  • hadoop开发环境搭建
  • 【论文速看】DL最新进展20241112-3D、异常检测、车道线检测
  • Python科学计算的利器:Scipy库深度解析
  • [滑动窗口] 长度最小的子数组, 无重复字符的最长子串, 最大连续1的个数③
  • SQL Server 索引如何优化?
  • 使用轻易云平台高效集成聚水潭与南网订单数据
  • 侯宗原国学退费:学会易理摆脱精神内耗
  • 揭开 gRPC、RPC 、TCP和UDP 的通信奥秘
  • Chrome与火狐哪个浏览器的移动版本更流畅
  • Unity3D 帧同步定点数物理引擎解决方案详解
  • 树-好难-疑难_GPT
  • spark的学习-04