微信小程序自定義底部導航欄胖烛,切換不同頁面顯示不同tabbar

在一個微信小程序中想要用到兩種不同的tabbar樣式眼姐,需要在app.js中自定義,在頁面加載時進行調(diào)用佩番。

比如一個小程序需要兩個版本(用戶版众旗、商家版),并且能通過一個按鈕在兩個版本間進行切換趟畏,可能會用到這種方式贡歧。

此處以兩個頁面(index,logs)顯示兩種tabbar樣式為例赋秀,通過切換按鈕進行切換利朵。

首先有一個模板文件:tabbar.wxml

<template name="tabBar">    
  <view class="tab-bar" style="color: {{tabBar.color}}; background: {{tarBar.backgroundColor}}; {{tabBar.position=='top'? 'top: 0' : 'bottom: 0'}}; {{tabBar.borderStyle? (tabBar.position=='top'? 'border-bottom: solid 1px '+tabBar.borderStyle + ';' : 'border-top: solid 1px '+tabBar.borderStyle + ';') : ''}}">    
  <block wx:for="{{tabBar.list}}" wx:key="pagePath">    
    <navigator url="{{item.pagePath}}" open-type="redirect" class="{{item.clas}}" style="{{item.active? 'color: '+(item.selectedColor? item.selectedColor : tabBar.selectedColor) : ''}}">    
      <image src="{{item.selectedIconPath}}" wx:if="{{item.active}}" class="img"></image>    
      <image src="{{item.iconPath}}" wx:if="{{!item.active}}" class="img"></image>  
      <text>{{item.text}}</text>    
    </navigator>    
    </block>  
    <view class="clear"></view>    
  </view>    
</template>   

在app.json中無需定義“tabBar”
在app.js中自定義如下

//app.js  

App({
  onLaunch: function () {
 
  },
 
  //第一種底部  
  editTabBar: function () {
    //使用getCurrentPages可以獲取當前加載中所有的頁面對象的一個數(shù)組,數(shù)組最后一個就是當前頁面猎莲。
 
    var curPageArr = getCurrentPages();    //獲取加載的頁面
    var curPage = curPageArr[curPageArr.length - 1];    //獲取當前頁面的對象
    var pagePath = curPage.route;    //當前頁面url
    if (pagePath.indexOf('/') != 0) {
      pagePath = '/' + pagePath;
    }
    
    var tabBar = this.globalData.tabBar;
    for (var i = 0; i < tabBar.list.length; i++) {
      tabBar.list[i].active = false;
      if (tabBar.list[i].pagePath == pagePath) {
        tabBar.list[i].active = true;    //根據(jù)頁面地址設置當前頁面狀態(tài)    
      }
    }
    curPage.setData({
      tabBar: tabBar
    });
  },
  //第二種底部绍弟,原理同上
  editTabBar1: function () {
    var curPageArr = getCurrentPages();
    var curPage = curPageArr[curPageArr.length - 1];
    var pagePath = curPage.route;
    if (pagePath.indexOf('/') != 0) {
      pagePath = '/' + pagePath;
    }
    var tabBar = this.globalData.tabBar1;
    for (var i = 0; i < tabBar.list.length; i++) {
      tabBar.list[i].active = false;
      if (tabBar.list[i].pagePath == pagePath) {
        tabBar.list[i].active = true; 
      }
    }
    curPage.setData({
      tabBar: tabBar
    });
  },
  globalData: {
    //第一種底部導航欄顯示
    tabBar: {
      "color": "#9E9E9E",
      "selectedColor": "#f00",
      "backgroundColor": "#fff",
      "borderStyle": "#ccc",
      "list": [
        {
          "pagePath": "/pages/index/index",
          "text": "職位",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "clas": "menu-item",
          "selectedColor": "#4EDF80",
          active: true
        },
        {
          "pagePath": "/pages/logs/logs",
          "text": "簡歷",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "selectedColor": "#4EDF80",
          "clas": "menu-item",
          active: false
        },
        {
          "pagePath": "/pages/test/test",
          "text": "我的",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "selectedColor": "#4EDF80",
          "clas": "menu-item",
          active: false
        }
      ],
      "position": "bottom"
    },
    //第二種底部導航欄顯示
    tabBar1: {
      "color": "#9E9E9E",
      "selectedColor": "#f00",
      "backgroundColor": "#fff",
      "borderStyle": "#ccc",
      "list": [
        {
          "pagePath": "/pages/index/index",
          "text": "首頁",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "clas": "menu-item1",
          "selectedColor": "#4EDF80",
          active: false
        },
        {
          "pagePath": "/pages/logs/logs",
          "text": "消息",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "selectedColor": "#4EDF80",
          "clas": "menu-item1",
          active: true
        },
        {
          "pagePath": "/pages/cont/index",
          "text": "簡歷",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "selectedColor": "#4EDF80",
          "clas": "menu-item1",
          active: false
        },
        {
          "pagePath": "/pages/detail/index",
          "text": "我的",
          "iconPath": "/images/my.png",
          "selectedIconPath": "/images/my.png",
          "selectedColor": "#4EDF80",
          "clas": "menu-item1",
          active: false
        }
      ],
      "position": "bottom"
    }
  }
})  

在app.wxss中定義顯示樣式

.menu-item{  
  width: 32%;  
  float: left;  
  text-align: center;  
  padding-top: 8px;  
}  
.menu-item1{  
  width: 24%;  
  float: left;  
  text-align: center;  
  padding-top: 8px;  
}  
.img{ 
  width: 23px;  
  height: 23px;  
  display: block;  
  margin:auto;  
}  
.clear{  
  clear: both;  
}  
.tab-bar{  
  position: fixed;  
  width: 100%;  
  padding: 0px 2%;  
}  
 
.button{
  margin: 130px;
}

index.wxml,用到自定義tabbar的頁面的首部都需要引入模板文件

 <import src="../../template/tabbar.wxml"/> 
 <template is="tabBar" data="{{tabBar}}"/>
 第一種底部導航欄樣式的頁面
 <button bindtap='tologs' size='mini' class="button">點擊切換</button>

index.js

//index.js  
var app = getApp();
Page({
  data: {
 
  },
  onShow:function(){
    app.editTabBar();    //顯示自定義的底部導航
  },
  tologs:function(){     //按鈕的綁定事件著洼,點擊跳轉(zhuǎn)至logs
    wx.redirectTo({
      url: '../logs/logs',
    })
  },
  onLoad: function () {
  
  }
})  

logs.js

//logs.js  
var app = getApp();
Page({
  data: {
   
  },
  //點擊按鈕跳轉(zhuǎn)頁面
  toindex: function () {
    wx.redirectTo({
      url: '../index/index',
    })
  },
  onLoad: function () {
    //加載本頁面的tabBar樣式
    app.editTabBar1();
  }
  
})  

加載自定義tabbar的那句話(app.editTabBar)寫在onload或onshow中都可以樟遣。

只寫了兩個主頁面,其他頁面可自行定義跳轉(zhuǎn)郭脂。

最后放上效果圖:

tabbar1
tabbar2
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末年碘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子展鸡,更是在濱河造成了極大的恐慌屿衅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莹弊,死亡現(xiàn)場離奇詭異涤久,居然都是意外死亡,警方通過查閱死者的電腦和手機忍弛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門响迂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人细疚,你說我怎么就攤上這事蔗彤。” “怎么了疯兼?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵然遏,是天一觀的道長。 經(jīng)常有香客問我吧彪,道長待侵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任姨裸,我火速辦了婚禮秧倾,結果婚禮上怨酝,老公的妹妹穿的比我還像新娘。我一直安慰自己那先,他們只是感情好农猬,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胃榕,像睡著了一般盛险。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勋又,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音换帜,去河邊找鬼楔壤。 笑死,一個胖子當著我的面吹牛惯驼,可吹牛的內(nèi)容都是我干的蹲嚣。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祟牲,長吁一口氣:“原來是場噩夢啊……” “哼隙畜!你這毒婦竟也來了?” 一聲冷哼從身側響起说贝,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤议惰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乡恕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體言询,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年傲宜,在試婚紗的時候發(fā)現(xiàn)自己被綠了运杭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡函卒,死狀恐怖辆憔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情报嵌,我是刑警寧澤虱咧,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站沪蓬,受9級特大地震影響彤钟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跷叉,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一逸雹、第九天 我趴在偏房一處隱蔽的房頂上張望营搅。 院中可真熱鬧,春花似錦梆砸、人聲如沸转质。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽休蟹。三九已至,卻和暖如春日矫,著一層夾襖步出監(jiān)牢的瞬間赂弓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工哪轿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盈魁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓窃诉,卻偏偏與公主長得像杨耙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子飘痛,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容