当前位置:网站首页>小程序自定义顶部导航栏,uni-app微信小程序自定义顶部导航栏
小程序自定义顶部导航栏,uni-app微信小程序自定义顶部导航栏
2022-07-01 02:21:00 【程序猿的秃头之路】
一个需求需要把左上角按钮,改成图标,效果如下

1、自定义顶部导航栏需要注意,具体可参考uniapp文档,查看文档

2、详细代码和配置,重点是兼容不同型号机型
2.1 page.json文件中去除原生导航栏样式 "navigationStyle": "custom"

2.2 App.vue在onShow中获取数据并存储
<script>
export default {
onShow: function() {
console.log('App Show')
uni.getSystemInfo({
success: (result) => {
// 获取手机系统的状态栏高度(不同手机的状态栏高度不同) ( 不要使用uni-app官方文档的var(--status-bar-height) 官方这个是固定的20px 不对的 )
// console.log('当前手机的状态栏高度',result.statusBarHeight)
let statusBarHeight = result.statusBarHeight + 'px'
// 获取右侧胶囊的信息 单位px
const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
//bottom: 胶囊底部距离屏幕顶部的距离
//height: 胶囊高度
//left: 胶囊左侧距离屏幕左侧的距离
//right: 胶囊右侧距离屏幕左侧的距离
//top: 胶囊顶部距离屏幕顶部的距离
//width: 胶囊宽度
// console.log(menuButtonInfo.width, menuButtonInfo.height, menuButtonInfo.top)
// console.log('计算胶囊右侧距离屏幕右边距离', result.screenWidth - menuButtonInfo.right)
let menuWidth = menuButtonInfo.width + 'px'
let menuHeight = menuButtonInfo.height + 'px'
let menuBorderRadius = menuButtonInfo.height / 2 + 'px'
let menuRight = result.screenWidth - menuButtonInfo.right + 'px'
let menuTop = menuButtonInfo.top + 'px'
let contentTop = result.statusBarHeight + 44 + 'px'
let menuInfo = {
statusBarHeight: statusBarHeight,//状态栏高度----用来给自定义导航条页面的顶部导航条设计padding-top使用:目的留出系统的状态栏区域
menuWidth: menuWidth,//右侧的胶囊宽度--用来给自定义导航条页面的左侧胶囊设置使用
menuHeight: menuHeight,//右侧的胶囊高度--用来给自定义导航条页面的左侧胶囊设置使用
menuBorderRadius: menuBorderRadius,//一半的圆角--用来给自定义导航条页面的左侧胶囊设置使用
menuRight: menuRight,//右侧的胶囊距离右侧屏幕距离--用来给自定义导航条页面的左侧胶囊设置使用
menuTop: menuTop,//右侧的胶囊顶部距离屏幕顶部的距离--用来给自定义导航条页面的左侧胶囊设置使用
contentTop: contentTop,//内容区距离页面最上方的高度--用来给自定义导航条页面的内容区定位距离使用
}
uni.setStorageSync('menuInfo', menuInfo)
},
fail: (error) => {
console.log(error)
}
})
},
}
</script>2.3 自定义顶部导航栏页面
<template>
<view class="index-page">
<!-- paddingTop不生效可换成marginTop -->
<view class="tab_title" :style="{ paddingTop: statusBarHeight}">
<!-- 左上角自定义样式 -->
<view class="menu_btn flex-betwee box-sizing"
:style="{ position: 'fixed', top: menuTop, left: menuRight, width: menuWidth, height: menuHeight, borderRadius: menuBorderRadius}">
<image class="logo" src="/static/logo.png" @click="goStepPage"></image>
<view class="tit">uniapp</view>
</view>
</view>
<view class="content_box box-sizing" :style="{marginTop:contentTop}">
内容
</view>
</view>
</template>
<script>
export default {
data() {
return {
statusBarHeight: uni.getStorageSync('menuInfo').statusBarHeight,//状态栏的高度(可以设置为顶部导航条的padding-top)
menuWidth: uni.getStorageSync('menuInfo').menuWidth,
menuHeight: uni.getStorageSync('menuInfo').menuHeight,
menuBorderRadius: uni.getStorageSync('menuInfo').menuBorderRadius,
menuRight: uni.getStorageSync('menuInfo').menuRight,
menuTop: uni.getStorageSync('menuInfo').menuTop,
contentTop: uni.getStorageSync('menuInfo').contentTop,
}
},
}
</script>
<style lang="scss" scoped>
.box-sizing {
box-sizing: border-box;
}
.index-page {
width: 100vw;
height: calc(100vh - 64px); // 解决页面无内容时上下滚动问题 高度默认44px + padding-top 20px
// padding: 32rpx;
.tab_title {
width: 100%;
height: 44px !important; //这个是固定的44px(所有小程序顶部高度都是 = 44px + 手机系统状态栏高度)
line-height: 44px;
text-align: center;
// background-color: #d00;
background-color: #f8f8f8 !important;
position: fixed;
top: 0;
z-index: 9999;
color: #000;
font-weight: 500;
.menu_btn {
width: 414rpx !important;
// background-color: #ffffff; //这个是小程序默认的标题栏背景色
overflow: hidden;
// position: fixed; //行内式写了固定定位--目的是去掉下划页面一起滚动问题
.arrowleft {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-160%, -50%) !important;
-webkit-transform: translate(-160%, -50%) !important;
}
.text_box {
width: 1rpx;
height: 20px;
background-color: #ddd;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%) !important;
-webkit-transform: translate(-50%, -50%) !important;
}
.home {
position: absolute;
top: 50%;
left: 50%;
transform: translate(60%, -50%) !important;
-webkit-transform: translate(60%, -50%) !important;
}
}
}
}
</style>完成,代码可直接复制使用
边栏推荐
- How to add a condition for an associated table in an SQL statement [null value required or not required]
- 【2022年】江西省研究生数学建模方案、代码
- 删除重复的电子邮箱
- Open source basic software companies, looking for you to create the future together (api7.ai)
- AS400 大廠面試
- PMP是什么?
- 最新微信ipad协议 CODE获取 公众号授权等
- SAP ALV汇总跟导出Excel 汇总数据不一致
- A preliminary understanding of operator overloading
- 详解数据治理知识体系
猜你喜欢

【JS】【掘金】获取关注了里不在关注者里的人

SWT / anr problem - storagemanagerservice stuck

修复表中的名字(首字符大写,其他小写)

How to realize the scene linkage of intelligent lock, lamp and intelligent curtain motor in zhiting?

AS400 API 从零到一的整个历程

详解数据治理知识体系

The whole process of AS400 API from zero to one

Leetcode 面试题 17.10. 主要元素

Electron pit Addon

Int and bit group turn to each other
随机推荐
SWT / anr problem - binder stuck
【JS】【掘金】获取关注了里不在关注者里的人
The image variables in the Halcon variable window are not displayed, and it is useless to restart the software and the computer
Leetcode interview question 17.10 Main elements
Template: globally balanced binary tree
In the fourth week of June, the list - flying melon data up main growth ranking list (BiliBili platform) was released!
int和位数组互转
LabVIEW计算相机图像传感器分辨率以及镜头焦距
模板:全局平衡二叉树
开源基础软件公司,寻找一起创造未来的你(API7.ai)
SWT/ANR问题--StorageManagerService卡住
CorelDRAW 2022中文精简64位直装版下载
FL studio20.9 fruit software advanced Chinese edition electronic music arrangement
How to realize the scene linkage of intelligent lock, lamp and intelligent curtain motor in zhiting?
nacos配置中心使用教程
Int and bit group turn to each other
小程序云开发之--微信公众号文章采集篇
Leetcode 面试题 17.10. 主要元素
项目管理是什么?
CorelDRAW 2022 Chinese Simplified 64 bit direct download