当前位置:网站首页>小程序自定义顶部导航栏,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>完成,代码可直接复制使用
边栏推荐
- 对象与对象变量
- Analysis on user behavior loss of data exploration e-commerce platform
- 如何在智汀中實現智能鎖與燈、智能窗簾電機場景聯動?
- There is no future to be expected. It is just the last fantasy of a migrant worker before he dies
- SQL语句关联表 如何添加关联表的条件 [需要null值或不需要null值]
- Clickhouse eliminates the gap caused by group by
- P6773 [noi2020] destiny (DP, segment tree merging)
- 模板:全局平衡二叉树
- (总结一)Halcon基础之寻找目标特征+转正
- Short message sending solution in medical his industry
猜你喜欢

(翻译)实时内联验证更容易让用户犯错的原因

Batch import of Excel data in applet

Sitge joined the opengauss open source community to jointly promote the ecological development of the database industry

My PMP learning test experience

Fix names in the table (first character uppercase, other lowercase)

RocketQA:通过跨批次负采样(cross-batch negatives)、去噪的强负例采样(denoised hard negative sampling)与数据增强(data augment

CorelDRAW 2022 Chinese Simplified 64 bit direct download

What are the applications of SMS in enterprises?

QML control type: tooltip

What is project management?
随机推荐
In the fourth week of June, the list - flying melon data up main growth ranking list (BiliBili platform) was released!
[proteus simulation] Arduino UNO +74c922 keyboard decoding drive 4x4 matrix keyboard
Live shopping mall source code, realize left-right linkage of commodity classification pages
C#生成putty格式的ppk文件(支持passphrase)
5款主流智能音箱入门款测评:苹果小米华为天猫小度,谁的表现更胜一筹?
522. 最长的特殊序列 II
集群方法同步执行框架 Suona
Rocketqa: cross batch negatives, de noised hard negative sampling and data augmentation
机器学习9-通用逼近器径向基函数神经网络,在新观点下审视PDA和SVM
Template: globally balanced binary tree
(翻译)实时内联验证更容易让用户犯错的原因
SWT/ANR问题--StorageManagerService卡住
现在开户有优惠吗?另外,手机开户安全么?
Delete duplicate email
How do I open an account on my mobile phone? Also, is it safe to open an account online?
Opencv -- Notes
Leetcode(524)——通过删除字母匹配到字典里最长单词
The mobile edge browser cannot open the third-party application
What are the top ten securities companies? In addition, is it safe to open an account online now?
What are the applications of SMS in enterprises?