微信小程序动态改变胶囊颜色

2021-07-27  本文已影响0人  小小鱼yyds

看别人的项目有这样一种设定,一进来没有导航栏只有返回按钮,胶囊颜色为黑色半透明,等滑动到一定高度以后导航栏出现,胶囊变成白色。
需要在js里面用到 wx.setNavigationBarColor,它有两个参数一起设定可以改变胶囊颜色,需要注意颜色要用十六进制

wx.setNavigationBarColor({
      backgroundColor:'#ffffff',
      frontColor:'#ffffff',
})
wx.setNavigationBarColor({
      backgroundColor:'#000000',
      frontColor:'#000000',
})

如果是指定页面胶囊颜色,之后不做改变,可以直接在json文件里面配置:

{
  "navigationBarTextStyle": "black",  
}
{
  "navigationBarTextStyle": "white",  
}

附带监听页面滚动,滑动到某一节点位置时改变胶囊颜色的方法:

onPageScroll(e){
     let query = wx.createSelectorQuery()
     let that = this
     query.select('.d-content').boundingClientRect(function(rect){
      // 滑动到此节点高度值+100的位置显示导航栏,胶囊为白色
       if(e.scrollTop > rect.top + 100){  
         that.setData({
          showNav: true
         })
         wx.setNavigationBarColor({
          backgroundColor:'#000000',
          frontColor:'#000000',
        })
       }else{
        // 否则隐藏导航栏,胶囊为黑色半透明
         that.setData({
          showNav: false
         })
         wx.setNavigationBarColor({
          backgroundColor:'#ffffff',
          frontColor:'#ffffff',
        })
       }
     }).exec()
  },

我用的是自定义导航栏,需要在json里面配置一下:

{
  "navigationStyle": "custom"
}

在app.js里面设置全局变量navHeight,动态计算导航栏高度:

globalData: {
    userInfo: null,
    navHeight: 0
  }

onLaunch里面:

wx.getSystemInfo({
      success: res => {
        //导航高度
        this.globalData.navHeight = res.statusBarHeight + 46;
      }, fail(err) {
        console.log(err);
      }
})

需要自定义导航栏页面的wxml文件:

<view class='nav bg-white' wx:if="{{showNav}}" style='height:{{navH}}px'>
    <view class='nav-title'>
      <text class="iconfont icon-fanhui"></text>
      {{navTitle}}
    </view>
  </view>

js文件:

const App = getApp();

Page({
 data: {
   navH:0,
   showNav:false,
  },
  onLoad: function (options) {
    this.setData({
      navH: App.globalData.navHeight
    })
   wx.setNavigationBarColor({
      backgroundColor:'#ffffff',
      frontColor:'#ffffff',
    })
  },
})

wxss文件:

.nav{
  width: 100%;
  overflow: hidden;
  position: fixed;
  top: 0;
  left: 0;
  z-index: 1000;
}
.nav-title{
  width: 100%;
  height: 45px;
  line-height: 45px;
  text-align: center;
  position: absolute;
  bottom: 0;
  left: 0;
  z-index: 10;
  font-family:PingFang-SC-Medium;
  font-size:36rpx;
  letter-spacing:2px;
}
.bg-white{
  background: white;
}
.icon-fanhui{
  position: absolute;
  left: 30rpx;
}

再调用监听页面滚动的方法就能动态显示隐藏导航栏。

上一篇下一篇

猜你喜欢

热点阅读