当前位置:网站首页>小程序自定义顶部导航栏,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>
完成,代码可直接复制使用
边栏推荐
- 视觉特效,图片转成漫画功能
- C # generates PPK files in putty format (supports passphrase)
- 522. Longest special sequence II
- (translation) use eyebrow shaped text to improve Title click through rate
- Fix names in the table (first character uppercase, other lowercase)
- What other hot spots are hidden under 1500W playback? Station B 2 future trends you can't miss
- What are the preferential activities for stock account opening? In addition, is it safe to open a mobile account?
- Pycharm 打开远程目录 Remote Host
- 零基础自学SQL课程 | 窗口函数
- Is there any discount for opening an account now? In addition, is it safe to open a mobile account?
猜你喜欢
VirtualBox installation enhancements
机器学习9-通用逼近器径向基函数神经网络,在新观点下审视PDA和SVM
Pytoch -- foundation refers to the north_ II. What high school students can understand [back propagation and gradient descent]
Machine learning 9-universal approximator radial basis function neural network, examining PDA and SVM from a new perspective
halcon变量窗口的图像变量不显示,重启软件和电脑都没用
The mobile edge browser cannot open the third-party application
Zero foundation self-study SQL course | window function
Electron pit Addon
What is project management?
Selenium classic interview question - multi window switching solution
随机推荐
SWT / anr problem - storagemanagerservice stuck
Leetcode (524) -- match the longest word in the dictionary by deleting letters
Analysis on user behavior loss of data exploration e-commerce platform
5款主流智能音箱入门款测评:苹果小米华为天猫小度,谁的表现更胜一筹?
十大券商有哪些?另外想问,现在在线开户安全么?
nacos配置中心使用教程
go: finding module for package
Leetcode(524)——通过删除字母匹配到字典里最长单词
Laravel event & subscription
【毕业季·进击的技术er】--毕业到工作小结
现在开户有优惠吗?另外,手机开户安全么?
如何在智汀中實現智能鎖與燈、智能窗簾電機場景聯動?
SQL语句关联表 如何添加关联表的条件 [需要null值或不需要null值]
Sitge joined the opengauss open source community to jointly promote the ecological development of the database industry
Electron pit Addon
Pytorch —— 基礎指北_貳 高中生都能看懂的[反向傳播和梯度下降]
The image variables in the Halcon variable window are not displayed, and it is useless to restart the software and the computer
集群方法同步执行框架 Suona
Upstream and downstream in software development
SWT/ANR问题--Native方法执行时间过长导致SWT