前言
如果大家用过微信提供的tabBar就会发现,他的tabBar有很大的局限性。
暂且不说样式局限性了,他提供的app.json配置文件中没有function。
这也就意味着使用它提供的这个组件,你只能用于跳转页面,不能干其它的事情

我YY的

以下是代码
说明:小程序的很大异步分思想体现了封装,以提高复用性。对此,一些简单代码我也封装了,考虑到了以后维护的方便性
目录结构如下:

图片配置文件:imgURI.js(由于小程序不支持xml和读取本地json,故用js代替)

 var host="/img/";
var arr={
//各种图片地址
log0:host+'log0.png',
log1:host+'log1.png',
my0:host+'my0.png',
my1:host+'my1.png',
add:host+'add.png'
}
function gets(arg){
return arr[arg];
}
module.exports ={
gets:gets
}

页面代码:index.wxml

 <!--选项卡-->
<view class="tabBar">
<block wx:for="{{tabBar}}">
<view class="tarItem" bindtap="{{item.tarFunction}}" data-index="{{index}}" >
<image class="tarIco" src="{{item.tarIco}}"></image>
<view class="tarTxt" >{{item.tarTxt}}</view>
</view>
</block>
</view> <!--选项卡对应的页面-->
<view class="pages1" hidden="{{tabBar[0]['isHidden']}}">
pages1
</view>
<view class="pages2" hidden="{{tabBar[2]['isHidden']}}">
pages2
</view>

页面样式:index.wxss

 .tabBar{width: 100%;
display: flex; flex-direction: row; justify-content:space-around;
position: fixed; bottom:;
border-top:red solid 1rpx; padding: 6rpx 0
}
.tarItem{text-align: center; font-size:30rpx; }
.tarIco{width: 60rpx; height: 60rpx}

页面逻辑:index.js

 var imgURI_js = require('../../utils/imgURI.js');
Page({
data: {
//配置选项卡
tabBar:[
{
tarFunction:'log' ,
tarIco:imgURI_js.gets('log1'),
tarTxt:'日志', isHidden:false
},
{
tarFunction:'add',
tarIco:imgURI_js.gets('add'),
tarTxt:'添加', isHidden:true
},
{
tarFunction:'my' ,
tarIco:imgURI_js.gets('my0'),
tarTxt:'备忘', isHidden:true
}
]
}, //点击日志tab
log:function(e){
var that=this;
var click=e.currentTarget.dataset.index;
//回调支持3个参数,第1个是遍历的数组内容;第2个是对应的数组索引,第3个是数组本身。
that.data.tabBar.forEach(function(value, index, array){
if(index!=click){array[index]['isHidden']=true;}
else{array[index]['isHidden']=false; }
})
that.data.tabBar[0]['tarIco']=imgURI_js.gets('log1');
that.data.tabBar[2]['tarIco']=imgURI_js.gets('my0');
that.setData(that.data);
}, //点击添加tab
add:function(){
var that=this;
wx.showActionSheet({
itemList: ['新增日程', '新增备忘'],
success: function(res) {
console.log(res.tapIndex)
}
})
}, //点击备忘tab
my:function(e){
var that=this;
var click=e.currentTarget.dataset.index;
that.data.tabBar.forEach(function(value, index, array){
if(index!=click){array[index]['isHidden']=true;}
else{array[index]['isHidden']=false;}
});
that.data.tabBar[0]['tarIco']=imgURI_js.gets('log0');
that.data.tabBar[2]['tarIco']=imgURI_js.gets('my1');
that.setData(that.data);
}
})

页面所用图片
log0:http://i1.piimg.com/580831/21427560d907daa1.png
log1:http://i1.piimg.com/580831/7301f39e7cd93dd8.png
add:http://i1.piimg.com/580831/ce49d7bc59e84c46.png
my0:http://i1.piimg.com/580831/091ca02deae1664b.png
my1:http://i1.piimg.com/580831/c5118f811ed44e28.png

效果预览

完整项目下载:https://git.oschina.net/dingshao/wechatApp_tabBar.git

自定义底部导航栏(tabBar)的更多相关文章

  1. 微信小程序自定义底部导航栏组件+跳转

    微信小程序本来封装有底部导航栏,但对于想自定义样式和方法的开发者来说,这并不是很好. 参考链接:https://github.com/ljybill/miniprogram-utils/tree/ma ...

  2. uniapp 小程序实现自定义底部导航栏(tarbar)

    在小程序开发中,默认底部导航栏很难满足实际需求,好在官方给出了自定义形式,效果如下: 话不多说,直接上代码 1.组件 custom-tarbar.vue文件 <template> < ...

  3. 小程序 - 底部导航栏“tabBar”

    小程序底部导航 1.app.json页面配置: { "pages": [ "pages/movie/movie", "pages/cinema/cin ...

  4. 添加底部导航栏tabbar

    效果图: 如果要添加底部导航栏,最少2个,最多5个. app.json { "pages": [ "pages/index/index", "page ...

  5. 01 uni-app框架学习:项目创建及底部导航栏tabBar配置

    1.创建一个项目类型选择uniapp 2. pages里新建3个页面如下 3.在pages.json中配置底部导航tabBar 效果展示:

  6. 小程序 mpvue自定义底部导航栏

    1.在compontents新建文件放入 <template> <section class="tabBar-wrap"> <article clas ...

  7. 微信小程序从零开始开发步骤(三)底部导航栏

    上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...

  8. mui底部导航栏切换分页

    使用Hbuilder的mui框架开发移动端非常便利.高效: 底部导航栏切换功能也是移动APP开发中必须实现的: 引入mui文件.下面会用到jquery,同时引进 <link href=" ...

  9. Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

    接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...

随机推荐

  1. 必须掌握的JavaScript基本知识

    作为一个前端工作者,应该了解一些javascript的发展历史,javascript实现及版本等.基本概念包括语法.关键字.变量.数据类型.操作符.语句控制及函数等,它们和我们学习的其它语言C/C++ ...

  2. 基于.NET的微信SDK

    超级懒汉编写的基于.NET的微信SDK   一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的 ...

  3. char* 转换成 CString

    真是有意思: CString mess ;    mess = m_chLocalIP; 这样OK,但是写在一行就会报错 CString mess  = m_chLocalIP; //有问题

  4. Dynamics CRM JS的调试的弊端解决办法

    说道CRMJS的调试的博客,之前已经有人写过.很简单,和平常网站JS的调试过程大致相同. 但是Dynamics 中JS调试最麻烦的莫过于出错之后需要修改代码了.因为随着JS代码的修改,伴随着需要保存和 ...

  5. C++ 关联容器之map插入相同键元素与查找元素操作

    一.插入相同键元素操作 (1)insert方法 在map中的键必须是唯一的,当想map中连续插入键相同但值不同的元素时,编译和运行时都不会发生任何错误,系统会忽略后面的对已存在的键的插入操作,如 ma ...

  6. treeview和listview的用法

    今天无聊中弄了个小东西,熟悉一下对listview和treeview的用法.代码如下:  public partial class Form1 : Form     {         private ...

  7. 【IOS开发】如何画1像素的线

    最近在项目中画了一根1像素的线,我是通过直接花一个但是通过PS查看,画了不止1个像素. 原代码语句: label1 = [[UILabel alloc] initWithFrame:CGRectMak ...

  8. rcp(插件开发) 如何查找自己定义的扩展点

    规则: 扩展点所在的插件ID(X)+扩展点的name(Y) 也就是 X.Y 具体代码 Platform.getExtensionRegistry().getExtensionPoint(X.Y).ge ...

  9. 企业架构与建模之使用ArchiMate进行分析

    企业架构与建模之使用ArchiMate进行分析(全系列完) 4. 使用ArchiMate进行分析 正如前面所说的那样,一个企业整体效率的提升有时并不是通过某一个领域内的优化就能达到的,而且这种忽视全局 ...

  10. C# 号码归属地查询算法

    C# 号码归属地查询算法(根据Android来电归属地二进制文件查询修改) 前言 近期有个项目需要用到号码归属查询,归属地数据库可能比不上ip138,淘宝上也有卖的-,-! 文本提供一个279188条 ...