微信小程序自定义导航栏,自适应手机屏幕高度(计算微信小程序默认胶囊高度)

微信小程序自定义导航栏,自适应手机屏幕高度(计算微信小程序默认胶囊高度)

小编最近遇到了一个需求,要取消掉微信小程序自带的导航栏,然后放一张纯色背景(非白色),然后下滑一段时间后要求变成白色。刚开始做的时候以为没啥难度,使用的是固定高度,做出来一测,不同手机屏幕高度不同,导航栏高度也是不统一的,直接没眼看了 *-*。然后就各种各种找度娘,然并卵!最后在我们一个前端大神的指导下知道了该怎么做,现在分享出来给大家提供参考。

1、首先在要自定义的页面中的pageName.json中加上,"navigationStyle": "custom" 隐藏微信小程序原生导航栏。

2、调用微信api获取手机系统屏幕高度和导航栏高度

getTopHeight:function(){
    //获取胶囊位置信息
    let menuButtonObject = wx.getMenuButtonBoundingClientRect();
    //定义导航位置参数
    var globalData={
      navHeight:0,
      navTop:0,
      windowHeight:0,
      ww:0,
      hh:0,
    }
    var navTop;
    var navHeight;
    //获取手机系统信息
    wx.getSystemInfo({
      success: res => {
        //导航高度
        var statusBarHeight = res.statusBarHeight;
        navTop = menuButtonObject.top;
        navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2;
        globalData.navHeight = navHeight;
        globalData.navTop = navTop;
        globalData.windowHeight = res.windowHeight;
        //可视窗口宽度
        var ww = res.windowWidth;
        //可视窗口高度
        var hh = res.windowHeight;
        globalData.ww = ww;
        globalData.hh = hh;
        console.log(globalData)
        //这是我自定义的返回图标位置高度 21单位是 rpx,是图标高度的一半,图标高度为48rpx
        var backHeight=(navTop*2+(navHeight-navTop))-21;
        that.setData({
          globalData:globalData,
          backHeight:backHeight
        })
      },
      fail(err) {
        console.log(err);
      }
    })
}

3、这里是wxml中的内容

<view class="bg-img">
  <image src="img/bgImg.png" class='img'></image>
</view>
<image src="img/back.png" class="backimg" bindtap="backPage" style="top:{{backHeight}}rpx;"></image>
<!-- 自定义导航 高度单位 rpx ,这里+4 是因为样式美观,你喜欢加多少都行,hidden这个参数在下面的方法中获取-->
<view class="top-view" style="height:{{(globalData.navHeight*2)+4}}rpx" hidden="{{hidden}}">
  <image src="img/back-black.png" class="backimg" bindtap="backPage" style="top:{{backHeight}}rpx;"></image>
</view>

4、监听页面滑动高度

/**
   * 监听页面滑动事件
   * @param {} e 
   */
  onPageScroll:function(e){
    //e.srolltop 是页面滑动的实时高度
    console.log(e.scrollTop)
    var that=this;
    //这里390是我顶部导航栏背景图片的高度 height 则是计算出来背景图片隐藏的高度
    var height=(390-(that.data.globalData.navHeight*2)+4)/2;
    console.log(height)
    if(parseInt(e.scrollTop)>height){
      that.setData({
        hidden:false
      })
    }else{
      that.setData({
        hidden:true
      })
    }
  },

至此,自定义导航栏完成,觉得有用的道友点个赞,如果有更好的方法,欢迎交流欢迎分享!

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值