实现过程
其中扫码买单,这个按钮效果,微信自带的tabBar是无法实现的,其后尝试了下custom-tab-bar 也是无法实现。
没办法了,既然微信的tabBar无法实现。那就自己弄个真-自定义tabBar来实现好了。
各位看官莫慌,下面就把解决方案放上来。首先先来讲下解决方案的思路,然后再把代码送上。
思路:
微信的tabBar无法实现,那么就放弃微信的tabBar,改用Component 来实现。把微信自带的tabBar隐藏起来,用Component 做成伪tabBar并应该到页面上。
- 把app.json下的 tabBar 给干掉。这样在首页就不会有tabBar显示了。
- 写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>
又重新操作了一遍,操作一切顺利……但icloud打不开移动后的iCloudDrive文件夹……我应该怎么办啊?