当前位置:   article > 正文

关于微信小程序动态改变底部导航栏问题

关于微信小程序动态改变底部导航栏问题

微信小程序目前是不支持动态修改tabbar的,如果想在不同的页面显示不同的底部导航,那只有自定义tabbar了,

首先创建tabbar.wxml的模板,代码如下:

  1. <template name="tabBar">
  2. <view class="tab-bar" style="color: {{tabBar.color}}; background: {{tarBar.backgroundColor}}; {{tabBar.position=='top'? 'top: 0' : 'bottom: 0'}}; {{tabBar.borderStyle? (tabBar.position=='top'? 'border-bottom: solid 1px '+tabBar.borderStyle + ';' : 'border-top: solid 1px '+tabBar.borderStyle + ';') : ''}}">
  3. <block wx:for="{{tabBar.list}}" wx:key="pagePath">
  4. <navigator url="{{item.pagePath}}" open-type="redirect" class="{{item.clas}}" style="{{item.active? 'color: '+(item.selectedColor? item.selectedColor : tabBar.selectedColor) : ''}}">
  5. <image src="{{item.selectedIconPath}}" wx:if="{{item.active}}" class="img"></image>
  6. <image src="{{item.iconPath}}" wx:if="{{!item.active}}" class="img"></image>
  7. <text>{{item.text}}</text>
  8. </navigator>
  9. </block>
  10. <view class="clear"></view>
  11. </view>
  12. </template>
在这个模板中,我们在list里面每个对象都增加了一个selectedColor和active属性,方便对每个tabBar当前页做样式

然后我们在app.js配置不同tabbar对象,代码如下:

  1. //app.js
  2. App({
  3.   onLaunch: function () {
  4.     //调用API从本地缓存中获取数据
  5.     var logs = wx.getStorageSync('logs') || []
  6.     logs.unshift(Date.now())
  7.     wx.setStorageSync('logs', logs)
  8.   },
  9.   //第一种状态的底部
  10.   editTabBar: function () {
  11.     var _curPageArr = getCurrentPages();
  12.     var _curPage = _curPageArr[_curPageArr.length - 1];  
  13.     var _pagePath = _curPage.__route__;
  14.     if (_pagePath.indexOf('/') != 0) {
  15.       _pagePath = '/' + _pagePath;
  16.     }
  17.     var tabBar = this.globalData.tabBar;
  18.     for (var i = 0; i < tabBar.list.length; i++) {
  19.       tabBar.list[i].active = false;
  20.       if (tabBar.list[i].pagePath == _pagePath) {
  21.         tabBar.list[i].active = true;//根据页面地址设置当前页面状态  
  22.       }
  23.     }
  24.     _curPage.setData({
  25.       tabBar: tabBar
  26.     });
  27.   },
  28.   //第二种状态的底部
  29.   editTabBar2: function () {
  30.     var _curPageArr = getCurrentPages();
  31.     var _curPage = _curPageArr[_curPageArr.length - 1];
  32.     var _pagePath = _curPage.__route__;
  33.     if (_pagePath.indexOf('/') != 0) {
  34.       _pagePath = '/' + _pagePath;
  35.     }
  36.     var tabBar = this.globalData.tabBar2;
  37.     for (var i = 0; i < tabBar.list.length; i++) {
  38.       tabBar.list[i].active = false;
  39.       if (tabBar.list[i].pagePath == _pagePath) {
  40.         tabBar.list[i].active = true;//根据页面地址设置当前页面状态  
  41.       }
  42.     }
  43.     _curPage.setData({
  44.       tabBar: tabBar
  45.     });
  46.   },
  47.   getUserInfo:function(cb){
  48.     var that = this
  49.     if(this.globalData.userInfo){
  50.       typeof cb == "function" && cb(this.globalData.userInfo)
  51.     }else{
  52.       //调用登录接口
  53.       wx.login({
  54.         success: function () {
  55.           wx.getUserInfo({
  56.             success: function (res) {
  57.               that.globalData.userInfo = res.userInfo
  58.               typeof cb == "function" && cb(that.globalData.userInfo)
  59.             }
  60.           })
  61.         }
  62.       })
  63.     }
  64.   },
  65.   globalData:{
  66.     userInfo:null,
  67.     tabBar: {
  68.       "color": "#9E9E9E",
  69.       "selectedColor": "#f00",
  70.       "backgroundColor": "#fff",
  71.       "borderStyle": "#ccc",
  72.       "list": [
  73.         {
  74.           "pagePath": "/pages/index/index",
  75.           "text": "首页",
  76.           "iconPath": "/img/home.png",
  77.           "selectedIconPath": "/img/home.png",
  78.           "clas":"menu-item",
  79.           "selectedColor": "#4EDF80",  
  80.           active: true
  81.         },
  82.         {
  83.           "pagePath": "/pages/logs/logs",
  84.           "text": "日志",
  85.           "iconPath": "/img/note.png",
  86.           "selectedIconPath": "/img/note.png",
  87.           "selectedColor": "#4EDF80",
  88.           "clas": "menu-item",
  89.           active: false
  90.         },
  91.         {
  92.           "pagePath": "/pages/test/test",
  93.           "text": "指南",
  94.           "iconPath": "/img/safari.png",
  95.           "selectedColor": "#4EDF80",
  96.           "clas": "menu-item",
  97.           active: false
  98.         }
  99.       ],
  100.       "position": "bottom"
  101.     },
  102.     tabBar2: {
  103.       "color": "#9E9E9E",
  104.       "selectedColor": "#f00",
  105.       "backgroundColor": "#fff",
  106.       "borderStyle": "#ccc",
  107.       "list": [
  108.         {
  109.           "pagePath": "/pages/index/index",
  110.           "text": "首页",
  111.           "iconPath": "/img/home.png",
  112.           "selectedIconPath": "/img/home.png",
  113.           "clas": "menu-item2",
  114.           "selectedColor": "#4EDF80",  
  115.           active: true
  116.         },
  117.         {
  118.           "pagePath": "/pages/logs/logs",
  119.           "text": "日志",
  120.           "iconPath": "/img/note.png",
  121.           "selectedIconPath": "/img/note.png",
  122.           "selectedColor": "#4EDF80",
  123.           "clas": "menu-item2",
  124.           active: false
  125.         },
  126.         {
  127.           "pagePath": "/pages/cont/index",
  128.           "text": "指南",
  129.           "iconPath": "/img/note.png",
  130.           "selectedIconPath": "/img/home.png",
  131.           "selectedColor": "#4EDF80",
  132.           "clas": "menu-item2",
  133.           active: false
  134.         },
  135.         {
  136.           "pagePath": "/pages/detail/index",
  137.           "text": "内容",
  138.           "iconPath": "/img/safari.png",
  139.           "selectedColor": "#4EDF80",
  140.           "clas": "menu-item2",
  141.           active: false
  142.         }
  143.       ],
  144.       "position": "bottom"
  145.     }
  146.   }
  147. })

然后我们在相应的page.js中加载相应的tabbar对象

例如,我们在首页的index.js中加载tabBar,代码如下:

  1. //index.js
  2. var app = getApp();
  3. Page({
  4.   data: {
  5.    
  6.   },
  7.   onLoad: function () {
  8.     app.editTabBar();
  9.   }
  10. })


则首页的效果图




然后点击日志页面,如果在logs.js中加载tabBar2,代码如下:

  1. //logs.js
  2. var app = getApp();
  3. var util = require('../../utils/util.js')
  4. Page({
  5. data: {
  6. logs: []
  7. },
  8. onLoad: function () {
  9. app.editTabBar2();
  10. this.setData({
  11. logs: (wx.getStorageSync('logs') || []).map(function (log) {
  12. return util.formatTime(new Date(log))
  13. })
  14. })
  15. }
  16. })


则日志页的效果图



我们可以看到页面跳转到日志页后底部导航栏改变了

导航栏的样式随意写的,也贴出来吧,方便大家测试,我是写在app.wxss中

  1. .menu-item{
  2. width: 32%;
  3. float: left;
  4. text-align: center;
  5. padding-top: 8px;
  6. }
  7. .menu-item2{
  8. width: 24%;
  9. float: left;
  10. text-align: center;
  11. padding-top: 8px;
  12. }
  13. .img{
  14. width: 23px;
  15. height: 23px;
  16. display: block;
  17. margin:auto;
  18. }
  19. .clear{
  20. clear: both;
  21. }
  22. .tab-bar{
  23. position: fixed;
  24. width: 100%;
  25. padding: 0px 2%;
  26. }

参考文章 

微信小程序编写tabBar模板,map组件markers属性动态初始化

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

闽ICP备14008679号