微信小程序开发之自定义菜单tabbar

做这个 遇到问题比较多,特此记录以便查看,直接上代码:

一、app.js

控制原有菜单隐藏、启用新菜单、菜单列表,集中在这里控制

hideTabBar这个很关键,解决苹果6S导致的双导航栏:原文https://blog.csdn.net/czp555/article/details/87258301

hideTabBar: function () {
    wx.hideTabBar({
      fail: function () {
        setTimeout(function () {
          wx.hideTabBar()
        }, 500)
      }
    });
  },
  editTabbar: function() {
    let tabbar = this.globalData.tabBar;
    let currentPages = getCurrentPages();
    let _this = currentPages[currentPages.length - 1];
    let pagePath = _this.route;
    (pagePath.indexOf('/') != 0) && (pagePath = '/' + pagePath);
    for (let i in tabbar.list) {
      tabbar.list[i].selected = false;
      (tabbar.list[i].pagePath == pagePath) && (tabbar.list[i].selected = true);
    }
    _this.setData({
      tabbar: tabbar
    });
  },
  globalData: { 
    tabBar: {
      "color": "#f3f3f3",
      "selectedColor": "#f3f3f3",
      "borderStyle": "white",
      "backgroundColor": "#ff731d",
      "list": [{
          "pagePath": "/youfan_market/pages/index/index",
          "text": "首页",
          "iconPath": "/youfan_market/resource/images/tabBar/home.png",
          "selectedIconPath": "/youfan_market/resource/images/tabBar/home.png"
        },
        {
          "pagePath": "/youfan_market/pages/category/category",
          "text": "分类",
          "iconPath": "/youfan_market/resource/images/tabBar/category.png",
          "selectedIconPath": "/youfan_market/resource/images/tabBar/category.png"
        },
        {
          "pagePath": "/youfan_market/pages/user/index",
          "text": "分享转发",
          "iconPath": "/youfan_market/resource/images/tabBar/share.png",
          "selectedIconPath": "/youfan_market/resource/images/tabBar/share.png",
          isShare: true
        },
        {
          "pagePath": "/youfan_market/pages/cart/cart",
          "text": "购物车",
          "iconPath": "/youfan_market/resource/images/tabBar/cart.png",
          "selectedIconPath": "/youfan_market/resource/images/tabBar/cart.png"
        },
        {
          "pagePath": "/youfan_market/pages/user/index",
          "text": "我的",
          "iconPath": "/youfan_market/resource/images/tabBar/user.png",
          "selectedIconPath": "/youfan_market/resource/images/tabBar/user.png"
        }
      ]
    }
  },

二、自定义组件

关于图标资源就不发了,需要的自己去iconfont找

在小程序根目录创建组件文件夹 tabbarComponent

tabbar.js

// tabBarComponent/tabBar.js
const app = getApp();
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    tabbar: {
      type: Object,
      value: {
        "backgroundColor": "#ffffff",
        "color": "#979795",
        "selectedColor": "#1c1c1b",
        "list": []
      }
    }
  }, 
  /**
   * 组件的初始数据
   */
  data: {
    isIphoneX:false // app.globalData.systemInfo.model == "iPhone X" ? true : false,
  },

  /**
   * 组件的方法列表
   */
  methods: { 
  }, 
})

 

tabbar.json

{
  "component": true,
  "usingComponents": {}
}

tabbar.wxml

<view class="tabbar_box {{isIphoneX?'iphoneX-height':''}}" style="background-color:{{tabbar.backgroundColor}}">
  <block wx:for="{{tabbar.list}}" wx:key="{{item.pagePath}}">
    <navigator wx:if="{{item.isSpecial}}" class="tabbar_nav" hover-class="none" url="{{item.pagePath}}" style="color:{{tabbar.selectedColor}}" open-type="navigate">
      <view class='special-wrapper'><image class="tabbar_icon" src="{{item.iconPath}}"></image></view>
      <image class='special-text-wrapper'></image> 
      {{item.text}}
    </navigator>
    <button wx:elif='{{item.isShare}}' class="tabbar_nav tabbar_btn" hover-class="none" style="color:{{tabbar.color}};border-radius:90%;" open-type="share">
      <image class="tabbar_icon" src="{{item.iconPath}}"></image> 
      {{item.text}}
    </button>
    <!-- <navigator wx:else class="tabbar_nav" hover-class="none" url="{{item.pagePath}}" style="color:{{item.selected ? tabbar.selectedColor : tabbar.color}}" open-type="redirect">
      <image class="tabbar_icon" src="{{item.selected ? item.selectedIconPath : item.iconPath}}"></image>
      <text>{{item.text}}</text>
    </navigator> -->
    <navigator wx:else class="tabbar_nav" hover-class="none" url="{{item.pagePath}}" style="color:{{item.selected ? tabbar.selectedColor : tabbar.color}}" open-type="switchTab">
      <image class="tabbar_icon" src="{{item.selected ? item.selectedIconPath : item.iconPath}}"></image> 
      {{item.text}}
    </navigator>
  </block>
</view>

tabbar.wxss

.tabbar_box {
  display: flex;
  flex-direction: row;
  justify-content: space-around;
  position: fixed;
  bottom: 0;
  left: 0;
  z-index: 999999;
  width: 100%;
  height: 98rpx;
  box-shadow: 0 0 2px rgba(0, 0, 0, 0.1);
}

.tabbar_box.iphoneX-height {
  padding-bottom: 66rpx;
}

.middle-wrapper {
  position: absolute;
  right: 310rpx;
  bottom: 0;
  background-color: #fff;
  width: 120rpx;
  height: 120rpx;
  border-radius: 50%;
  border-top: 2rpx solid #f2f2f3;
}

.middle-wrapper.iphoneX-height {
  bottom: 66rpx;
}

.tabbar_nav {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  font-size: 20rpx;
  height: 100%;
  position: relative;
}

.tabbar_btn {
  padding: 0;
  border: none;
  background: #ff731d;
}

.tabbar_icon {
  width: 50rpx;
  height: 50rpx;
}

.special-wrapper {
  position: absolute;
  left: 77rpx;
  top: -36rpx;
  width: 96rpx;
  height: 96rpx;
  border-radius: 50%;
  border-top: 2rpx solid #f2f2f3;
  background-color: #fff;
  text-align: center;
  box-sizing: border-box;
  padding: 6rpx;
}

.special-wrapper .tabbar_icon {
  width: 84rpx;
  height: 84rpx;
}

.special-text-wrapper {
  width: 56rpx;
  height: 56rpx;
}

 

三、页面调用

js

var app = getApp()
Page({
  data: {
    tabbar: {}, 
  },
  onLoad: function(options) { 
    app.editTabbar();
    
  },
  onReady: function () {
    app.hideTabBar();
  },
  onShow: function () {
    app.hideTabBar(); 
  }, 

json

{
  "enablePullDownRefresh": false,
  "usingComponents": {
    "tabbar": "../../tabbarComponent/tabbar"
  }
}

wxml 底部添加

<tabbar tabbar="{{tabbar}}"></tabbar>

 

OK,万事大吉了

最后要说的没源码,没时间去弄

推荐一篇别人的写的:https://www.jianshu.com/p/2cd4a23b504b

 

 

 

 

posted @ 2019-03-22 22:48  心存善念  阅读(5793)  评论(0编辑  收藏  举报