当前位置:   article > 正文

微信小程序——自定义底部tabBar_custom-tab-bar

custom-tab-bar

目录

 实现步骤

1、配置信息

2、添加代码文件。

 3、在该目录下编写代码即可。

二、在app.json里面添加tabBar配置

三.、在custom-tab-bar添加配置

1. 在custom-tab-bar创建如下目录

2.给index.wxml添加tabBar的结构代码  

3. 给index.js 添加数据配置 和 事件方法

4. 给index.wxss 添加样式

四、tabbar图标切换 要点击两次才能有选中状态

五 原生wxtabBar的设置(右上角红点和消息)


 实现步骤

参考官方网站,自定义tabBar

自定义 tabBar | 微信开放文档

1、配置信息

需要在app.json中设置一个属性custom,为true ,代表全局开启自定义tab

 

注意:当我们设置了custom属性之后,那么tabBar下面的list数组是否可以删了呢?

答:不可以,文档里面已经明确表示是不可以删的,需要保持完整配置项以及低版本里面可以不适用自定义tabBar,因此需要兼容、

2、添加代码文件。

这个目录结构是固定的 ,必须要在项目根目录创建一个文件夹: custom-tab-bar,以及对应的文件。

第一步骤中的custom设置为true,小程序就可以自动读取该目录下的index组件,把该组件当做tab渲染出来

 3、在该目录下编写代码即可。

 

二、在app.json里面添加tabBar配置

  1. "pages":[
  2. "pages/index/index",
  3. "pages/logs/logs",
  4. "pages/goods/index"
  5. ],
  6. "tabBar": {
  7. "custom": true,
  8. "color": "#000000",
  9. "selectedColor": "#000000",
  10. "backgroundColor": "#000000",
  11. "list": [{
  12. "pagePath": "pages/index/index",
  13. "text": "首页"
  14. }, {
  15. "pagePath": "pages/goods/index",
  16. "text": "商品"
  17. }]
  18. }

三.、在custom-tab-bar添加配置

1. 在custom-tab-bar创建如下目录

  1. custom-tab-bar/index.js
  2. custom-tab-bar/index.json
  3. custom-tab-bar/index.wxml
  4. custom-tab-bar/index.wxss

2.给index.wxml添加tabBar的结构代码  

1、为什么canvas组件总是会在最上层?

由于canvas组件是原生组件,原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上。

2、 如何解决canvas层级最高问题?

方法一:用原生组件覆盖原生组件

为了解决原生组件层级最高的限制。小程序专门提供了 cover-view 和 cover-image 组件,可以覆盖在部分原生组件上面。这两个组件也是原生组件,但是使用限制与其他原生组件有所不同。
比如:cover-view只支持嵌套 cover-viewcover-imagebutton

  1. <!--miniprogram/custom-tab-bar/index.wxml-->
  2. <cover-view class="tab-bar">
  3. <cover-view class="tab-bar-border"></cover-view>
  4. <cover-view wx:for="{{list}}" wx:key="index" class="tab-bar-item" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
  5. <cover-image src="{{selected === index ? item.selectedIconPath : item.iconPath}}"></cover-image>
  6. <cover-view style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</cover-view>
  7. </cover-view>
  8. </cover-view>

3. 给index.js 添加数据配置 和 事件方法

  1. Component({
  2. data: {
  3. selected: 0,
  4. color: "#7A7E83",
  5. selectedColor: "#3cc51f",
  6. list: [{
  7. pagePath: "/pages/index/index",
  8. iconPath: "/image/home2_icon.png",
  9. selectedIconPath: "/image/home1_icon.png",
  10. text: "首页"
  11. }, {
  12. pagePath: "/pages/goods/index",
  13. iconPath: "/image/readTrain2_icon.png",
  14. selectedIconPath: "/image/readTrain1_icon.png",
  15. text: "商品"
  16. }]
  17. },
  18. attached() {
  19. },
  20. methods: {
  21. switchTab(e) {
  22. console.log("执行跳转",e);
  23. const data = e.currentTarget.dataset
  24. const url = data.path
  25. wx.switchTab({url})
  26. this.setData({
  27. selected: data.index
  28. })
  29. }
  30. }
  31. })

4. 给index.wxss 添加样式

  1. /* custom-tab-bar/index.wxss */
  2. .tab-bar {
  3. position: fixed;
  4. bottom: 0;
  5. left: 0;
  6. right: 0;
  7. height: 48px;
  8. background: white;
  9. display: flex;
  10. padding-bottom: env(safe-area-inset-bottom);
  11. }
  12. .tab-bar-border {
  13. background-color: rgba(0, 0, 0, 0.33);
  14. position: absolute;
  15. left: 0;
  16. top: 0;
  17. width: 100%;
  18. height: 1px;
  19. transform: scaleY(0.5);
  20. }
  21. .tab-bar-item {
  22. flex: 1;
  23. text-align: center;
  24. display: flex;
  25. justify-content: center;
  26. align-items: center;
  27. flex-direction: column;
  28. }
  29. .tab-bar-item cover-image {
  30. width: 27px;
  31. height: 27px;
  32. }
  33. .tab-bar-item cover-view {
  34. font-size: 10px;
  35. }

此时,通过点击切换页面,就可以实现

=》如果在选择点击切换按钮时,页面没根据tabBar进行切换,问题很可能能在custom-tab-bar目录的index.js 的list数据配置的页面路径,一定要/开头,如/pages/goods/index,这才能找到页面。

四、tabbar图标切换 要点击两次才能有选中状态

在`/pages/index目录的index.js文件,的onShow生命周期方法,添加如下代码

  1. onShow() {
  2. if (typeof this.getTabBar === 'function' &&
  3. this.getTabBar()) {
  4. this.getTabBar().setData({
  5. //唯一标识(其它设置不同的整数)
  6. selected: 0
  7. })
  8. }
  9. },

五 原生wxtabBar的设置(右上角红点和消息)

wx.setTabBarBadge(Object object)  为 tabBar 某一项的右上角添加文本

wx.removeTabBarBadge(Object object)  移除 tabBar 某一项右上角的文本

  1. tabBarTitle(num) {
  2. console.log(num, 'numnumnumnumnum');
  3. if (num == '') {
  4. wx.removeTabBarBadge({//移除tabbar右上角的文本
  5. index: 1,//tabbar下标
  6. })
  7. } else {
  8. wx.setTabBarBadge({//tabbar右上角添加文本
  9. index: 1,//tabbar下标
  10. text: num.toString() //显示的内容,必须为字符串
  11. })
  12. }
  13. }

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