前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >小程序 - 如何自定义导航栏

小程序 - 如何自定义导航栏

作者头像
WahFung
发布于 2020-08-24 07:10:26
发布于 2020-08-24 07:10:26
1.4K00
代码可运行
举报
文章被收录于专栏:前端技术分享前端技术分享
运行总次数:0
代码可运行

思路

自定义导航栏高度组成:状态栏(绿色部分)、导航栏(蓝色部分)

状态栏

通过调用 wx.getSystemInfoSync 获取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const res = wx.getSystemInfoSync()
this.setData({
   statusBarHeight:res.statusBarHeight
})

导航栏

通过获取右上角胶囊的位置信息计算,navBarPadding为导航栏上下的间隙

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let res = wx.getMenuButtonBoundingClientRect()
let navBarPadding = (res.top - this.data.setStatusBarHeight) * 2 
this.setData({
   navBarHeight: res.height + navBarPadding
})

代码

app.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
App({
  onLaunch () {
     this.setStatusBarHeight()
     this.setNavBar()
  },
  //设置系统状态栏高度
  setStatusBarHeight(){
      try {
        const res = wx.getSystemInfoSync()
        this.globalData.statusBarHeight = res.statusBarHeight
      }catch(error){
        console.log(error)
      }
  },
  //设置导航栏height
  setNavBar(){
      let res = wx.getMenuButtonBoundingClientRect()
      let navBarPadding = (res.top - this.globalData.statusBarHeight) * 2 
      this.globalData.navBarHeight = res.height + navBarPadding
  }, 
  globalData: {
    statusBarHeight: 20,
    navBarHeight: 44
  }
})

wxml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view class="top-bar-wrap">
    <view class="top-bar-main" style="padding-top:{{statusBarHeight}}px;height:{{navBarHeight}}px">
        自定义导航栏
    </view>
</view>

wxss:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.top-bar-wrap{
    z-index: 9999;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
}
.top-bar-main{
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    color:#fff;
}

js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const app = getApp()
Component({
  data: {
    statusBarHeight: app.globalData.statusBarHeight,
    navBarHeight: app.globalData.navBarHeight
  }
})

最后

setStatusBarHeight、setNavBar这两个方法最好写到app.js中,获取好放在app.globalData中,这两个高度可能不止自定义导航栏需要用到。

比如使用了自定义导航栏的页面,因为自定义导航栏是fixed定位脱离文档流,导致整个页面就会上移,所以要给页面加上padding-top,高度跟自定义导航栏的高度一致,即 statusBarHeight + navBarHeight。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Taro小程序开发总结
onReachBottom (原生的上拉加载),在子组件components里面是不支持的,必须在父级的pages下才能够起作用
前端老道
2020/05/12
1.1K0
Taro小程序开发总结
微信小程序实现吸顶、网格、瀑布流布局
微信小程序开发通常是在webview模式下编写,但是对小程序的渲染性能有一定的追求,就需要使用Skyline模式进行渲染,同时在这种模式下有也有一些特殊的组件,可以轻松的实现想要的效果,本文将介绍在Skyline模式下如何实现吸顶、网格、瀑布流布局。
越陌度阡
2024/05/24
2.2K0
微信小程序实现吸顶、网格、瀑布流布局
微信小程序(四)绝对不可错过切换自定义菜单栏的骚操作
在开发小程序的时候,一般的小程序用官方自带的菜单栏就够了,但一但稍微复杂的小程序可能因为产品经理的一句“页面太多了得加个菜单”,就可能要对菜单栏进行增、删、改的操作,这个时候自带的就满足不了需求了,可以使用官方提供的自定义菜单栏。但官方提供的自定义菜单栏有个特点,就是菜单栏的页面必须是 Component ,假如你是在项目做到一半的时候有要对菜单栏进行增、删、改的需求,用官方提供自定义菜单栏就需要把page页面改成 Component,那就需要很多时间修改页面逻辑,会很麻烦。所以这个时候,我们就可以采用官方自带的菜单栏和自己封装的菜单栏组合使用,这样能节省修改逻辑的时间,还能享受自带菜单的良好交互。
用户6256742
2024/06/22
2130
微信小程序(四)绝对不可错过切换自定义菜单栏的骚操作
[保姆级教程]uniapp自定义导航栏
在你的页面 pages.json 配置中,为相应的页面设置 navigationStyle 为 custom,这将隐藏默认的导航栏。
肥晨
2024/07/04
1.3K0
微信小程序----全国机场索引列表(MUI索引列表)
效果展示图 实现的原理 '当前选择机场’和右侧的导航栏采用的是固定定位; 左侧的展示窗口的滚动采用的是scroll-view组件; 选择中的字母提示是自己WXSS样式制作。 WXML <view cl
Rattenking
2021/02/01
9690
微信小程序----全国机场索引列表(MUI索引列表)
微信小程序的wx-charts插件-tab选项卡
yangyan4.png 微信小程序的wx-charts插件-tab选项卡 效果: GIF.gif //index.js var wxCharts = require('../../utils/wxcharts-min.js'); const app = getApp(); var ringChart = null; Page({ data: { selected: true, selected1: false }, torecord() { wx.navigate
达达前端
2019/07/03
1.1K0
微信小程序的wx-charts插件-tab选项卡
微信小程序自定义导航栏兼容适配所有机型
这是小程序官方文档截图,可以看到导航栏样式支持两种,默认是带导航栏,另外一种是自定义导航栏-custom,如果使用自定义导航栏,我们可以
青年码农
2021/11/12
2.5K0
微信小程序(一)自定义导航栏和fixed失效及各机型兼容问题
相信掘友们应该或多或少都开发过微信小程序,微信小程序的写法虽然和vue有很多类似的地方,但又有很多vue属性,在小程序中没有类似的实现,比如计算属性,watch 监听等; 因为小程序是附着在微信 app 上,所以经常要处理一些安卓端和苹果端的兼容,比如有些苹果机屏幕下方有安全区域,一些安卓机上点输入框输入完毕后点完成按钮键盘不能自动收回,导致输入框不能失去焦点的问题,等等... 为了以后自己和掘友们不再浪费踩坑的时间,我打算写一些文章记录一下我在开发微信小程序中遇到的一些坑和一些小功能的实现过程。
andyhu
2022/12/14
2.6K0
微信小程序(一)自定义导航栏和fixed失效及各机型兼容问题
如何一人五天开发完复杂小程序(前端必看)
自定义导航栏布局下,我们可以完全控制导航栏样式,赋予导航栏更多交互及 UI 设计上的可能。如上图所示,Readhub 在导航栏中加入了设置按钮,喜茶在个人页中标题渐隐及沉浸式导航栏效果。
ConardLi
2019/10/21
1.7K0
如何一人五天开发完复杂小程序(前端必看)
【愚公系列】2022年08月 微信小程序-自定义导航栏功能的实现
导航栏是指位于页面顶部或者侧边区域的,在页眉横幅图片上边或下边的一排水平导航按钮,它起着链接站点或者软件内的各个页面的作用。
愚公搬代码
2022/09/28
1K0
【愚公系列】2022年08月 微信小程序-自定义导航栏功能的实现
自定义微信导航栏
虽然自定义效果还不错,但是要注意进行微信版本的兼容问题,window.navigationStyle 只能支持 6.6.0 以上微信版本,对应基础库版本为 1.9.1。如果需要针对低版本微信进行兼容,要做好兼容性适配。
前端黑板报
2018/12/21
8860
记一次小程序自定义导航栏及加载动画的解决方案
主要逻辑就是动态获取设备的 statusBarHeight 和 titleBarHeight,来设置导航栏的高度和 paddingTop
JS菌
2019/04/10
1.6K0
记一次小程序自定义导航栏及加载动画的解决方案
小程序实战(三) - head组件的封装与使用
微信小程序的head一般是开发者通过在app.json来设置统一的样式,又或者在每个页面的json中对对应的页面进行设置
是乃德也是Ned
2022/08/04
1.2K0
小程序实战(三) - head组件的封装与使用
微信小程序自定义状态栏
为了避免遮挡用户手机顶部状态栏,还需要获取用户手机状态栏的高度,并在在每个页面中添加一个占位用的 view标签来防止遮挡用户状态栏。
渔父歌
2019/03/15
1.9K0
微信小程序自定义状态栏
微信小程序项目小点一
在微信小程序中,自定义导航栏的颜色 可以在app.json的window里面添加navigationBarBackgroundColor属性。
生南星
2019/07/25
9850
微信小程序项目小点一
借助小程序·云开发制作校园导览小程序丨实战
当你刚上大学的时候,要想不迷失校园,除了依靠不怎么可靠的路边标识外,总会收到那么一张卡通绘制的校园地图:
腾讯云开发TCB
2019/10/11
9.3K1
【小程序】384- 如何一人五天开发完复杂小程序(前端必看)
自定义导航栏布局下,我们可以完全控制导航栏样式,赋予导航栏更多交互及 UI 设计上的可能。如上图所示,Readhub 在导航栏中加入了设置按钮,喜茶在个人页中标题渐隐及沉浸式导航栏效果。
pingan8787
2019/10/23
9920
【小程序】384- 如何一人五天开发完复杂小程序(前端必看)
使用原生开发高仿瑞幸小程序(二):使用云存储并实现轮播图
轮播图是我们常见的一种表现形式,通常,图片之间要做到无缝衔接循环需要花一些功夫,而小程序提供的组件就已经可以实现。可以说省去了开发者不少的时间。所以,今天我们要一起来学习以下几件事:
一只图雀
2020/05/26
1.8K0
手把手带你学习微信小程序 —— (微信小程序常用代码块)
wx:key 是为了提高循环效率而出现了,给它的值,只要是循环元素中的唯一的标识符就可以了
Gorit
2021/12/08
1.6K0
手把手带你学习微信小程序 —— (微信小程序常用代码块)
uniapp状态栏、导航栏、胶囊数据
// 获取状态栏高度 var statuBar = uni.getSystemInfoSync().statusBarHeight; // 获取胶囊数据 var custom = wx.getMenuButtonBoundingClientRect() // 获取胶囊的宽高 customWidth = custom.width customHeight = custom.height // 获取胶囊的上下左右坐标 customTop = custom.top customBottom = cutsom.b
听着music睡
2022/12/07
2.2K0
推荐阅读
相关推荐
Taro小程序开发总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验