關於微信小程序的tarbar,相信大家都不會陌生 在實現小程序微信原裝的tabbar卻比較呆板,不夠精緻,每每不符合本身的要求css
先說一下這套方案的優勢:json
實現這套方案核心仍是自定義組件
小程序
那就從這開始聊:
一個自定義組件由 json wxml wxss js 4個文件組成。
微信小程序
{
//聲明引用一個組件 配置好你的組件引用路徑
"usingComponents": {
"icon": "../../components/icon/index"
}
}
複製代碼
//這樣就可以在你的頁面中添加組件
<icon type="" color="" size=""/>
複製代碼
若是對於組件的定義仍有疑惑的能夠參考這份文檔: 官方關於自定義組件的文檔bash
{
//聲明這一組文件設爲自定義組件
"component": true,
"usingComponents": {}
}
複製代碼
<!-- 注意style裏面的分號! -->
<text class="iconfont icon-{{type}}" style="color:{{color}}; font-size:{{size}}rpx" ></text>
複製代碼
//這裏定義了3個自定義屬性他們經過{{}}與wxml中的數據鏈接起來
Component({
properties: {
type: {
type: String,
value: ''
},
color: {
type: String,
value: '#000000'
},
size: {
type: Number,
value: '45'
}
}
})
複製代碼
到此,字體圖標組件搞定。微信
{
"component": true,
//聲明對字體圖標組件的引用
"usingComponents": {
"icon": "../../components/icon/index"
}
}
複製代碼
<view class="weibo-tabbar" >
//綁定回首頁事件,此處的data-hi中的數據是爲了傳遞到e.currentTarget.dataset.hi
//經過這個數據咱們能夠用來判斷是否處於首頁,而後在js中配置能夠阻擾原地跳轉
<view class="item-left" bindtap="goHome" data-hi="{{isIndex}}">
<icon type="shouye" color="{{isIndex?'#000000':'#b1b1b1'}}" size="45"/>
<text class="1" style="color:{{isIndex?'#000000':'#b1b1b1'}}">首頁</text>
</view>
<block wx:if="{{isInner}}">
<view class="item-right" style="color:#b1b1b1" bindtap="goShare">
<icon type="fenxiang" color="gray" size="45"/>
<text class="2">分享</text>
</view>
</block>
<block wx:else>
<view class="item-right" bindtap="goInfo" data-hi="{{isIndex}}">
<icon type="wode" color="{{isIndex?'#b1b1b1':'#000000'}}" size="45"/>
<text class="2" style="color:{{isIndex?'#b1b1b1':'#000000'}}">個人</text>
</view>
</block>
</view>
複製代碼
const app = getApp();
Component({
properties: {
isIndex: { // 是否主頁
type: Boolean,
value: false,
},
isInner: { //是否內部頁面
type: Boolean,
value: false,
},
},
data: {
// 這裏是一些組件內部數據
someData: {}
},
methods: {
// 這裏是一個自定義方法
goHome: (e) => {
// 判斷是否爲主頁面防止原地跳轉
if(!e.currentTarget.dataset.hi){
wx.redirectTo({
url: "/pages/index/index"
})
}
},
goShare: function () {
},
goInfo: (e) => {
if(e.currentTarget.dataset.hi){
wx.redirectTo({
url: "/pages/info/info"
})
}
}
}
})
複製代碼
.weibo-tabbar {
bottom: 0;
height: 97rpx;
padding: 12rpx 0rpx;
display: flex;
width: 100%;
position: fixed;
background: #ffffff;
box-sizing: border-box;
}
//產生優雅的0.5px邊框
.weibo-tabbar::after {
content: "";
position: absolute;
width: 200%;
height: 200%;
top: 0;
left: 0;
border-top: 1rpx solid rgba(177, 177, 177, 0.4);
transform: scale(0.5);
transform-origin: 0 0;
}
//這裏用flex佈局,移動端flex佈局確實很爽
.weibo-tabbar .item-left, .item-right{
//這裏有一處坑,若不不設置他的層級變大的話
//你是點不到這個item按鈕的,固然也不會產生觸碰事件
z-index: 999;
width: 50%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-size: 20rpx;
color: #b1b1b1;
}
.shouye, .wode {
height: 45rpx;
width: 45rpx;
}
複製代碼
//此處isIndex是給組件的屬性傳輸值,別屬性不添加即爲默認屬性值
<tabbar isIndex="true"></tabbar>
複製代碼
結果:app
哇,看了半天就出這麼一個小東西!
其實大道至簡
掌握這套方案可以適配你須要的全部tabbar
他的顏色、大小、位置均可以本身掌控,重要的是這個解決方案。xss
以爲不錯的話能夠點個贊鼓勵一下喲佈局