微信小程序自定义导航栏,实现自适应

今天碰到一个页面需要自定义导航栏的,不需要原生导航;
第一步先取消原生导航栏,只需要在json文件里面加入"navigationStyle":"custom"即可去掉原生导航栏,
微信小程序自定义导航栏,实现自适应_第1张图片
一开始直接用固定高度加定位,发现在不用设备下尺寸不对,就比如iPhone X那个刘海屏,
微信小程序自定义导航栏,实现自适应_第2张图片
微信小程序自定义导航栏,实现自适应_第3张图片

然后就开始找适配的方法,首先是状态栏

wx.getSystemInfo(Object object)

微信小程序自定义导航栏,实现自适应_第4张图片
这个api可以获取状态栏高度
然后就是右上角胶囊按钮的高度
微信小程序自定义导航栏,实现自适应_第5张图片

Object wx.getMenuButtonBoundingClientRect()

微信小程序自定义导航栏,实现自适应_第6张图片
这个api可以获取胶囊按钮的高度和距离顶部的距离
所以 总高度 = 状态栏高度+(胶囊按钮高度 - 状态栏高度)*2 +胶囊按钮高度
然后 导航栏高度 = 总高度 - 状态栏高度
微信小程序自定义导航栏,实现自适应_第7张图片
微信小程序自定义导航栏,实现自适应_第8张图片
在iPhone X也没有问题
然后我们可以在导航里面再加一句,也可以不加
微信小程序自定义导航栏,实现自适应_第9张图片
高度就是等于胶南按钮的高度,到这里就完成了一个自定义导航
在入口app.js里面获取信息

onLaunch: function () {
    //获取系统信息
    wx.getSystemInfo({
      success: res => {
        this.time = res
      }
    })
    //获取胶囊信息
    this.nav = wx.getMenuButtonBoundingClientRect()

需要用到的界面

<view>
	//状态栏
  <view class="a" style="height:{{globalData}}px"> </view>
  //导航栏
  <view class="b" style="height:{{globalDatas}}px">
    <view class="c" style="height:{{globalDatassh}}px"></view>
  </view>
</view>
.a{
  background: #ff00ff;
}
.b{
  background: rgb(19, 141, 197);
  display: flex;
  align-items: center;
}
.c{
  background: rgb(194, 202, 206);
  width: 100%;
}

然后就是计算赋值,在js里面计算,然后通过绑定style实现动态修改自适应

const app = getApp()

Page({
  data: {
    globalData:app.time.statusBarHeight, //状态栏高度,
    globalDatas:app.nav.height + (app.nav.top - app.time.statusBarHeight)*2 + app.nav.top - app.time.statusBarHeight, //导航栏高度
    globalDatassh: app.nav.height //胶囊高度
  },

以上就是自定义导航的全部内容
小白一个,写错多多包涵

你可能感兴趣的:(笔记,小程序,前端)