微信小程序自定义不一样的tabBar

Laughing
2021-04-22 / 0 评论 / 1,356 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月18日,已超过305天没有更新,若内容或图片失效,请留言反馈。

实现过程

其中扫码买单,这个按钮效果,微信自带的tabBar是无法实现的,其后尝试了下custom-tab-bar 也是无法实现。

没办法了,既然微信的tabBar无法实现。那就自己弄个真-自定义tabBar来实现好了。

各位看官莫慌,下面就把解决方案放上来。首先先来讲下解决方案的思路,然后再把代码送上。

思路:

  微信的tabBar无法实现,那么就放弃微信的tabBar,改用Component 来实现。把微信自带的tabBar隐藏起来,用Component 做成伪tabBar并应该到页面上。

  1. 把app.json下的 tabBar 给干掉。这样在首页就不会有tabBar显示了。
  2. 写Component 伪tabBar并应该到页面上。

代码

app.json删除 tabBar

自定义component

<!--Componet/tabBar/tabBar.wxml-->
<view class="tabBar">
    <view class="cont">
        <block wx:for="{{tabBar}}" wx:for-item="item" wx:key="tabBar">
            <view class="item {{item.switchQr?'switchQr':''}}" catchtap="{{!item.switchQr?'goToTab':'switchQr'}}" data-url="{{item.pagePath}}" data-index="{{index}}">
                <image class="ico" src="{{idx === index ? item.selectedIconPath : item.iconPath}}"></image>
                <view class="txt {{idx === index ? 'selectedColor' : ''}}">{{item.text}}
                </view>
            </view>
        </block>
    </view>
</view>
// Componet/tabBar/tabBar.js
Component({
    /**
     * 组件的属性列表
     */
    properties: {
        idx: {
            type: Number,
            value: 0
        },
    },
    /**
     * 组件的初始数据
     */
    data: {
        tabBar: [{
                "pagePath": "../../pages/index/index",
                "text": "首页",
                "switchQr": false,
                "iconPath": "/image/home.svg",
                "selectedIconPath": "/image/home_sel.svg",
            },
            {
                "pagePath": "",
                "text": "扫码买单",
                "switchQr": true,
                "iconPath": "/image/saoma.svg",
            },
            {
                "pagePath": "../../pages/user/user",
                "text": "我的",
                "switchQr": false,
                "iconPath": "/image/mine.svg",
                "selectedIconPath": "/image/mine_sel.svg",
            },
        ]
    },
    /**
     * 组件的方法列表
     */
    methods: {
        goToTab: function (e) {
            //如果点击当前页面则不进行跳转
            if (this.data.idx == e.currentTarget.dataset.index) {
                return false
            }
            wx.navigateTo({
                url: e.currentTarget.dataset.url
            })
        },
        // 扫码
        switchQr() {
            // console.log('扫码')
            
        },
        
    }
})
/* Componet/tabBar/tabBar.wxss */

.tabBar {
    width: 100%;
    position: fixed;
    bottom: 0;
    font-size: 20rpx;
    color: #8A8A8A;
    background: #fff;
    /* border-top: 2rpx solid #eee; */
    box-shadow: 0rpx 1rpx 6rpx rgba(0,0,0,0.3);
}

.cont {
    margin-top: 10rpx;
    padding: 0;
    z-index: 0;
    height: calc(100rpx + env(safe-area-inset-bottom) / 2);
    padding-bottom: calc(env(safe-area-inset-bottom) / 2);
    display: flex;
}

.cont .item {
    font-size: 24rpx;
    position: relative;
    flex: 1;
    text-align: center;
    padding: 0;
    display: block;
    height: auto;
    line-height: 1;
    margin: 0;
    background-color: inherit;
    overflow: initial;
    justify-content: center;
    align-items: center;
}

.cont .item .ico {
    width: 46rpx;
    height: 46rpx;
    margin: auto
}

.cont .item .txt{
    margin-top: 8rpx;
    color: #333;
}

.cont .switchQr .ico {
    position: absolute;
    width: 106rpx !important;
    z-index: 2;
    height: 106rpx !important;
    border-radius: 50%;
    font-size: 50rpx;
    top: -50rpx;
    left: 0;
    right: 0;
    margin: auto;
    padding: 0;

}
.cont .switchQr .txt{
    margin-top: 56rpx;
}

.cont .item .selectedColor{
    color: #ff4e4e;
}

使用

在index/user的页面上应用。

要在index.json/user.json文件引用component

"usingComponents": {
     "tabBar":"/Componet/tabBar/tabBar"
   },

在页面的引用component

 <!-- index.wxml -->
<tabBar idx="0"></tabBar>

<!--user.wxml -->
<tabBar idx="2"></tabBar>
24

评论 (0)

取消
  1. 头像
    vivi
    Windows 10 · MicroSoft Edge
    @ Laughing

    又重新操作了一遍,操作一切顺利……但icloud打不开移动后的iCloudDrive文件夹……我应该怎么办啊?

    回复