当前位置:   article > 正文

微信小程序之导航栏样式修改、自定义导航栏及封装_微信小程序状态栏

微信小程序状态栏

 

在微信小程序中我们会经常看到不同字样的顶部标题,这样的样式有的是一样的,而有的却又是不同的导航栏,这是怎么回事呢,在这里我们就探讨一下。(微信小程序json文件不能有注释,复制过去的时候有注释记得自行删除,希望能帮到大家,喜欢的给个赞,感谢)

一、使用微信小程序的默认导航栏

1、在app.json中进行如下配置则能够实现全局的顶栏

  1. "window":{
  2. "navigationBarBackgroundColor": "#333",//设置顶栏背景颜色
  3. "navigationBarTextStyle": "black",//导航栏标题颜色,仅支持 black / white
  4. "navigationBarTitleText": "首页测试",//设置顶栏文字
  5. "backgroundColor": "#eeeeee",//窗口的背景色
  6. "backgroundTextStyle": "light",//下拉 loading 的样式,仅支持 dark / light
  7. }

 2、而如果想要子页面的顶栏文字不同,则在相应的json文件里添加

  1. {
  2.     "navigationBarTitleText""光与影"
  3. }

结果截图:

二、使用自定义的导航栏

1、首先需要把默认的导航栏隐藏起来,在app.json文件中设置

  1. "window":{
  2. "navigationStyle": "custom"
  3. },

2、需要app.js里全局设置获取不同手机的状态栏,注意要先定义一个全局变量navHeight,这样就能把获取到的状态栏高度变成一个全局变量。

  1. //app.js
  2. App({
  3. onLaunch: function () {
  4. wx.getSystemInfo({
  5. success: res => {
  6. //导航高度
  7. this.globalData.navHeight = res.statusBarHeight + 46;
  8. }, fail(err) {
  9. console.log(err);
  10. }
  11. })
  12. },
  13. globalData: {
  14. userInfo: null,
  15. navHeight: 0
  16. }
  17. })

3、在子页面中拿会拿到全局变量navHeight

  1. const App = getApp();
  2. Page({
  3. onLoad: function (options) {
  4. this.setData({
  5. navH: App.globalData.navHeight
  6. })
  7. },
  8. })

4、把拿到的数据显示

  1. <view>
  2. <view class='nav bg-white' style='height:{{navH}}px'>
  3. <view class='nav-title'>
  4. 首页
  5. <image src='../../img/back.png' mode='aspectFit' class='back' bindtap='navBack'></image>
  6. <image src='../../img/home.png' mode='aspectFit' class='back1' bindtap='navBack'></image>
  7. </view>
  8. </view>
  9. <scroll-view class='bg-gray overflow' style='height:calc(100vh - {{navH}}px)' scroll-y>
  10. <view class='hidden'>
  11. 我是首页
  12. </view>
  13. </scroll-view>
  14. </view>

结果截图:

三、把自定义导航栏封装成组件

       之前只是简单的实现自定义导航栏,要自定义导航栏,那么一般都会有很多地方用到,每个地方都复制就不是很友好,最好是能够把它封装成一个组件。

1、目录结构如下:

2、把之前的页面照搬过来

  1. <!-- navBar-wxml -->
  2. <view>
  3. <view class='nav bg-white' style='height:{{navH}}px'>
  4. <view class='nav-title'>
  5. 首页
  6. <view wx:if="{{navData.show}}" >
  7. <image src='../../img/back.png' mode='aspectFit' class='back' bindtap='navBack'></image>
  8. <image src='../../img/home.png' mode='aspectFit' class='back1' bindtap='navBack'></image>
  9. </view>
  10. </view>
  11. </view>
  12. </view>

3、Js文件需要做一下修改,之前首页也有返回图标,现在把图标隐藏,去到子页面的时候再显示

  1. const app = getApp();
  2. Component({
  3. properties: {//类似于vue的props用来进行父子组件之间的传值
  4. navData:{ //自定义属性用于服级组件传值过来
  5. type: Object,
  6. value: ['']
  7. }
  8. },
  9. data: {
  10. navH: app.globalData.navHeight //把从全局拿到的手机状态栏高度赋值给页面自定义的高度
  11. },
  12. methods: {
  13. }
  14. })

4、主要把子页面的引用展示一下,首页更简单,也是一样,所以就不赘述首页代码了

(1)在json文件引入组件

  1. {
  2. "usingComponents": {
  3. "navBar": "../../components/navBar"
  4. }
  5. }

(2)在js文件,定义需要传到子组件的数据

  1. //logs.js
  2. Page({
  3. data: {
  4. navData: {//传给子组件的数据,用来控制图标的显示
  5. show:true
  6. }
  7. },
  8. })

(3)页面显示

  1. <view>
  2. <navBar navData="{{navData}}" />
  3. <scroll-view class='bg-gray overflow' style='height:calc(100vh - {{navH}}px)' scroll-y>
  4. <view class='hidden'>
  5. 我是子页面
  6. </view>
  7. </scroll-view>
  8. </view>

结果截图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/219379
推荐阅读
相关标签
  

闽ICP备14008679号