自定义底部导航栏(tabBar)
前言
如果大家用过微信提供的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)的更多相关文章
- 微信小程序自定义底部导航栏组件+跳转
微信小程序本来封装有底部导航栏,但对于想自定义样式和方法的开发者来说,这并不是很好. 参考链接:https://github.com/ljybill/miniprogram-utils/tree/ma ...
- uniapp 小程序实现自定义底部导航栏(tarbar)
在小程序开发中,默认底部导航栏很难满足实际需求,好在官方给出了自定义形式,效果如下: 话不多说,直接上代码 1.组件 custom-tarbar.vue文件 <template> < ...
- 小程序 - 底部导航栏“tabBar”
小程序底部导航 1.app.json页面配置: { "pages": [ "pages/movie/movie", "pages/cinema/cin ...
- 添加底部导航栏tabbar
效果图: 如果要添加底部导航栏,最少2个,最多5个. app.json { "pages": [ "pages/index/index", "page ...
- 01 uni-app框架学习:项目创建及底部导航栏tabBar配置
1.创建一个项目类型选择uniapp 2. pages里新建3个页面如下 3.在pages.json中配置底部导航tabBar 效果展示:
- 小程序 mpvue自定义底部导航栏
1.在compontents新建文件放入 <template> <section class="tabBar-wrap"> <article clas ...
- 微信小程序从零开始开发步骤(三)底部导航栏
上一章节,我们分享了如何创建一个新的页面和设置页面的标题,这一章我们来聊聊底部导航栏是如何实现的.即点击底部的导航,会实现不同对应页面之间的切换. 我们先来看个我们要实现的底部导航栏的效果图:(三个导 ...
- mui底部导航栏切换分页
使用Hbuilder的mui框架开发移动端非常便利.高效: 底部导航栏切换功能也是移动APP开发中必须实现的: 引入mui文件.下面会用到jquery,同时引进 <link href=" ...
- Android开源项目——带图标文字的底部导航栏IconTabPageIndicator
接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译 ...
随机推荐
- jQuery在html有效,在jsp无效的原因
最近用jQuery来写下拉框的选项值的左右移动,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- Akka入门实例
Akka入门实例 Akka 是一个用 Scala 编写的库,用于简化编写容错的.高可伸缩性的 Java 和 Scala 的 Actor 模型应用. Actor模型并非什么新鲜事物,它由Carl Hew ...
- boost------signals2的使用1(Boost程序库完全开发指南)读书笔记
signals2基于Boost的另一个库signals,实现了线程安全的观察者模式.在signals2库中,观察者模式被称为信号/插槽(signals and slots),他是一种函数回调机制,一个 ...
- enode框架
enode框架 2.0 step by step之整体架构介绍 前言 enode框架简介 enode架构图 command handler一次只处理一个command 让domain生活在in mem ...
- Data Annotations
Data Annotations Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己 ...
- 运动检测(前景检测)之(二)混合高斯模型GMM
运动检测(前景检测)之(二)混合高斯模型GMM zouxy09@qq.com http://blog.csdn.net/zouxy09 因为监控发展的需求,目前前景检测的研究还是很多的,也出现了很多新 ...
- poj3984迷宫问题
一个5 × 5的二维数组,表示一个迷宫.其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 很简单的一道题,迷宫问题,一般都选择两种优先搜索 ...
- js chart
如何在我们项目中利用开源的图表(js chart) 最近觉得应该把自己在技术上的一些心得记录在博客里面跟大家分享,一起讨论,一起成长! 这篇随笔主要为介绍chart在项目中的运用,因为在我们看到一 ...
- 利用WCF与Android实现图片上传并传参
利用WCF与Android实现图片上传并传参 最近做一个项目后端使用WCF接收Android手机拍照并带其它参数保存到服务器里:刚好把最近学习的WCF利用上,本以为是个比较简单的功能应该很好实现,没想 ...
- 我的JQuery复习笔记之①——text(),html(),val()的区别
text():①可匹配多个元素 ②过滤其中的标签(只显示文字) ③只适用于双标签 html():①只匹配选中元素中的第一个 ②不过滤其中标签 ③只适用于双标签 val():①只匹配选中元素中的第一个 ...