前言:采用模板template格式进行自定义所需要的菜单,以及可以根据不同的需求在同一个小程序中显示不一样的菜单navbar

效果对比图:

效果对比图

1.定义Navbar格式(在根目录下新增一个.wxml文件)

<template name="navbar"><view class="tabBar_box" style="background-color:{{tabBar.backgroundColor}}; {{tabBar.position == 'top' ? 'top:0' : 'bottom:0'}};position:fixed;bottom:0;"><block wx:for="{{tabBar.list}}" wx:for-item="item" wx:key="nav"><navigator class="tabBar_nav" url="{{item.pagePath}}" style="width:{{1/tabBar.list.length*100}}%; " open-type="redirect" bindtap="changeTabBar"><image class="tabBar_icon" src="{{item.selected ? item.selectedIconPath : item.iconPath}}"></image><text style="color:{{item.selected ? tabBar.selectedColor : tabBar.color}}">{{item.text}}</text></navigator></block></view>
</template>

2.对navbar可进行自定义样式(因为小程序全部页面都会用到,所以可在app.wxss中定义navbar样式)

.tabBar_box{display: flex;flex-direction: row;justify-content: space-around;position: fixed;bottom: 0;left: 0;z-index: 999;width: 100%;height: 120rpx;border-top: 1rpx solid #d7d7d7;
}.tabBar_nav{display: flex;flex-direction: column;justify-content: center;align-items: center;font-size: 28rpx;height: 100%;
}.tabBar_icon{width: 50rpx;height:50rpx;
}

3.对于navbar菜单所显示的只以及相关图标信息值的配置可在全局app.js中进行初始化定义

 tabBar: {selectedColor: "#0592E4",list: [{pagePath: "/pages/List/List",text: "分润详情",iconPath: "/pages/image/Detail01.png",selectedIconPath: "/pages/image/Detail02.png",selected: true},{pagePath: "/pages/Spread/Spread",text: "推广管理",iconPath: "/pages/image/tuig01.png",selectedIconPath: "/pages/image/tuig02.png",selected: false},{pagePath: "/pages/Settlement/Settlement",text: "结算管理",iconPath: "/pages/image/Settl01.png",selectedIconPath: "/pages/image/Settl02.png",selected: false},{pagePath: "/pages/Account/Account",text: "账户信息",iconPath: "/pages/image/me21.png",selectedIconPath: "/pages/image/me22.png",selected: false}],position: "bottom"}

对于navbar相关数据初始化的定义就基本 已经完成,接下来就是要引用模板

<import src="../../navbar.wxml" />
<template is="navbar" data="{{tabBar}}"/>

【对于模板的引用有一点注意事项,

在定义模板时,<template name="navbar"></template>,

引用时              <template is="navbar" data="{{tabBar}}"/>

具体相关文档参考 官方文档:https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/template.html】

在每一个navbar所指向的页面中,都需要定义赋值,否则该页面初始化时无法读取到数据

Page({/*** 页面的初始数据*/data: {tabBar: app.globalData.tabBar,},
});

采用template模板定义菜单已基本完成;

但还有一些动态操作功能需要实现

其一:点击菜单进行页面跳转时,该图标切换为selectIconpath中路径的图标,selected:false也未更改

解决办法:需要在点击文字图标时增加一个bindtap事件

changeTabBar

 /*** navbar菜单导航切换事件*/changeTabBar: function () {var that = this;var _curPageArr = getCurrentPages();var _curPage = _curPageArr[_curPageArr.length - 1];var _pagePath = _curPage.__route__;if (_pagePath.indexOf('/') != 0) {_pagePath = '/' + _pagePath;}var tabBar = app.globalData.tabBar;console.log(tabBar);for (var i = 0; i < tabBar.list.length; i++) {tabBar.list[i].selected = false;if (tabBar.list[i].pagePath == _pagePath) {tabBar.list[i].selected = true;//根据页面地址设置当前页面状态  }}that.setData({tabBar: tabBar});}, 

【注意if之后一定要重新赋值setData,因为页面加载是会读取page-data中的数据,

虽然在if条件中进行判断当前页面以及进行修改selected值,但是并未进行赋值,所以会出现selecticonPath无效的情况】

其二:使用模板template自定义菜单是因为比较灵活,如果采用微信小程序自身定义,无法进行灵活,或者可应用与菜单只有一种情况下。我才用自定义template定义菜单是因为我会出现两种不一样的菜单导航

解决办法:可提前判断当前登录人的身份并且进行选择相应的菜单导航值,或者删除之后重新定义赋值

 /**
* 根据登录人身份进行显示navbar
* 1  团队经销商;0-个人经销商
*/navbar: function () {var that = this;var type = app.globalData.userInfo.ChannelTypevar tabBar = app.globalData.tabBar;if (type == 0) {console.log("个人");for (var i = 0; i < tabBar.list.length; i++) {if (tabBar.list[i].text == "结算管理") {tabBar.list.splice(i, 1);//根据页面地址设置当前页面状态  console.log(tabBar.list[i].text == "结算管理");that.setData({tabBar: app.globalData.tabBar});}}that.setData({tabBar: app.globalData.tabBar});}},

【因为登录之后就需要显示相应的菜单,所以需要在页面加载时去执行该方法】

  /*** 生命周期函数--监听页面加载*/onLoad: function (options) {var that=this;that.navbar();    },

自定义菜单功能基本已实现,

【如有不正确的地方或者不恰当的地方还请指出,谢谢!】

小程序自定义菜单Navbar相关推荐

  1. 微信小程序自定义菜单tabbar后初次进入小程序会出现两个tabbar

    微信小程序自定义tabbar后,初次进去小程序会出现aap.json中配置的tabbar同时也会出现自定义的tabbar,当关闭小程序在此进入就好了只显示自定义tabbar 解决办法就是在小程序初次进 ...

  2. 微信小程序自定义导航栏(带汉堡包菜单)

    微信小程序自定义导航栏(带汉堡包菜单) 1.在app.json中 window配置navigationStyle (如果单独页面使用,可在页面的json文件配置) 2.计算相关值 整个导航栏的高度: ...

  3. 解决小程序自定义底部菜单切换闪动

    解决小程序自定义底部菜单切换闪动 业务上可能会有一个需求使用自定义底部菜单相信会有很多人遇到过这个需求 但是自定义底部菜单会有一个问题,在点击切换页面的时候底部菜单会重新加载,导致页面闪动,比较影响用 ...

  4. 小程序自定义导航栏返回主页

    小程序自定义导航栏返回主页 效果图 在app.js中获取状态栏的高度statusBarHeight 自定义组件navbar.wxml 自定义组件navbar.wxss 自定义组件navbar.json ...

  5. 小程序自定义搜索框_将自定义搜索提供程序添加到Windows 7以及高级搜索技巧

    小程序自定义搜索框 Disclaimer: Many of my tips have crashed cars, broken lights, and caused lawnmowers to go ...

  6. 小程序导航栏透明,精准设置小程序自定义标题的高度和定位

    这里写自定义目录标题 场景 设置页面标题栏为自定义模式 一些概念 - 重点 解决方案 详细代码 util.js 主页面 自定义标题栏组件 场景 常见场景为ui小姐姐为页面顶部设计了漂亮的图片例如我们的 ...

  7. 小程序自定义导航栏 navigationStyle

    小程序自定义导航栏 微信提供自定义导航栏说明 开始自定义导航栏组件 微信提供自定义导航栏说明 微信版本 6.60 window下的 navigationStyle 属性,设置为 custom 即可关闭 ...

  8. 微信小程序自定义导航栏 navigation bar 返回键 首页

    微信小程序自定义导航栏(wx_custom_navigation_bar) 自定义返回键.首页键,动态设置标题,响应式组件 版本号:2.0.0 作者:chen-yt github: https://g ...

  9. 微信小程序自定义navigationbar与下拉刷新思考

    第一次开发小程序,产品提出要求导航栏字体样式,然后系统的未提供修改的接口. 那么只能自定义导航栏才行呀. 迅速的自定义了一个导航栏 app.json中添加 "navigationStyle& ...

最新文章

  1. 合并本地Maven仓库
  2. 最佳DevOps工具获奖者:CloudBees Jenkins平台
  3. UVa 729 The Hamming Distance Problem【枚举排列】
  4. 《spring实战第四版》的读书笔记
  5. CTF-杂项16进制字符串类型的题目
  6. Unity基础之:UnityAPI的学习
  7. Python程序开发——第七章 模块与包
  8. 4、java中的流程控制(程序结构)
  9. 亚型多态性应用于元组的危险
  10. datagrip调试存储过程_PLC控制柜是什么?当PLC程序设置完后,如何调试能不烧毁PLC?...
  11. oracle audit文件,oracle 参数文件audit_trail的认识
  12. 回顾2016,工作总结!
  13. 阿里云播放器的官方文档
  14. 浏览器html中加入word,web网页中加载word
  15. linux怎么运行cu,Linux cu 命令
  16. mysql 查询当前时间到毫秒_MySQL 关于毫秒和微秒的处理,MySQL获取毫秒!
  17. Banner尺寸多大最好!
  18. IIS 部署.NET网站无法访问解决办法
  19. 微信小程序 MinUI 组件库系列之 abnor 异常流组件
  20. Anaconda 修改默认虚拟环境安装位置

热门文章

  1. 电动飞机成空中Uber 打飞的上班或在5年内实现
  2. html5 video播放调研
  3. PMP在国内的含金量
  4. 百度竞价如何优化百度网盟
  5. 图像滤镜艺术---仿Instagram PC版图像编辑软件
  6. Python深度学习实战:多类花朵分类
  7. 高通 虚拟化 linux android,RAITE Hypervisor介绍
  8. 2021FME博客大赛 —— FME与“快递小哥”的故事
  9. 微信小程序入门解读-③
  10. python dashboard django_django 12.dashboard仪表盘 - 刘江的django教程