uni-app自带的底部导航栏虽然也很好用,但是遇到中间需要有一个自定义按钮的需求的时候如果使用自带的midButton,就只支持App,小程序什么都不支持。
ADTabbar自定义底部导航栏支持App、小程序的中间自定义按钮,可以自己设置css让他凸起。
注:配合该组件的根页面(也就是每个底部菜单对应的第一个页面),需要用到自定义组件模式,详细用法可以看Demo工程
暂不支持nvue
还有不足的地方会及时优化,也欢迎提出建议!
Demo工程
在 template 中使用组件
参照微信小程序官方文档, 自定义tabbar ,但该文档只是实现了自定义tabbar,没有实现不同角色不同的tabbar,且官方文档中的custom-bab-bar组件中的setData方法存在在真机上不能重新渲染的bug,可能是由于缓存造成的。
本项目仓库: customtabbar 。
主要是在tab的页面组件中调用getTabBar接口后再调用setData方法,从而实现了tabbar的重新渲染。
在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。即wx:for指令用于循环数组数据,生成组件。
循环出来的每一项通过item返回,每一项对应的索引,通过index返回。
wx:key="",设置每一项唯一的标识。循环列表时,添加wx:key的好处是,将来列表发生变化时重新渲染列表的损耗为更低。
使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名:
条件渲染可以使用 wx:if 或 hidden 。
一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好;如果在运行时条件不大可能改变,则 wx:if 较好。
wx:if用于条件渲染:条件为真生成里面的内容,条件为假不会生成里面的内容。(每次重新生成内容)
也可以用 wx:elif 和 wx:else 来添加一个 else 块。
hidden用于条件渲染:条件为真隐藏里面的内容,条件为假显示里面的内容。(每次切换样式)
在appjson文件中添加tabBar节点。tabBar是小程序客户端底部或顶部tab栏的实现。
color: tab上的文字默认颜色,仅支持十六进制颜色。
selectedColor: tab上的文字选中时的颜色,仅支持十六进制颜色。
backgroundColor: tab的背景色,仅支持十六进制颜色。
borderStyle: tabbar上边框的颜色, 仅支持 black / white。
position: tabBar的位置,默认值是: bottom,仅支持 bottom / top。当 position 为 top 时,不显示 icon。
custom: 自定义tabBar。
list是一个数组,它定义了tab的列表。只能配置最少2个、最多5个tab。
pagePath: 页面路径,必须在 pages 中先定义。
text: tab 上按钮文字。
iconPath: 路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。
selectedIconPath: 选中时的路径,icon 大小限制为 40kb,建议尺寸为 81px 81px,不支持网络。
跳转到普通页,可以直接通过返回按钮返回。
navigateTo()方法,用于跳转普通页面。可以直接通过返回按钮返回。
页面js文件中添加方法:
redirectTo()方法,关闭当前页面再跳转到指定页,不能通过返回按钮返回页面。该方法不能用于跳转tabBar页面。
页面js文件中添加方法:
跳转到tabBar页面,通过tabBar按钮返回。
如果要使用navigator组件跳转tabBar页面,需要设置open-type="switchTab"。
switchTab()方法,用于跳转tabBar页面。
页面js文件中添加方法:
关于自定义tabbar在跳转的时候,tabbar因为是跟页面的一起绑定,所以会跟随页面一起出现,不是像官方的tabbar一样一直待在页面上。这就是闪动的根本所在。
针对闪动看了一个demo,是让tabbar定义为一个页面,然后让你要显示的页面一组件的形式,插入到tabbar的页面,这样tabbar一直在一个页面上所以就不存在,tabbar跟随页面滚动也就是闪动问题。
2019-2-14,又纠结到这个问题上,使用自定义tabbar使用wxnavigateTo会出现页面栈充满,然后不会跳转问题,使用wxreLaunch等又会出现闪动太大不能接受问题,最后使用在主页面使用官方tabbar组件显示,其他页面需要tabbar的话使用自定义tabbar解决。
例子:>
在一个微信小程序中想要用到两种不同的tabbar样式,需要在appjs中自定义,在页面加载时进行调用。
比如一个小程序需要两个版本(用户版、商家版),并且能通过一个按钮在两个版本间进行切换,可能会用到这种方式。
此处以两个页面(index,logs)显示两种tabbar样式为例,通过切换按钮进行切换。
首先有一个模板文件:tabbarwxml
在appjson中无需定义“tabBar”
在appjs中自定义如下
在appwxss中定义显示样式
indexwxml,用到自定义tabbar的页面的首部都需要引入模板文件
indexjs
logsjs
加载自定义tabbar的那句话(appeditTabBar)写在onload或onshow中都可以。
只写了两个主页面,其他页面可自行定义跳转。
最后放上效果图:
虽然在appjson里面设置tabBar很方便。但是也有弊端。如果是每个页面都需要有这个tabBar的话,显然用原生的就不能满足这个需求了。因此我们需要第二种方案。
此处我是放在了components文件夹里面,后期有公用的组件都可以放在里面
由于用了组件库,所以此处要同时引入组件库的样式
此时,哪个页面要用 就直接执行最后一步使用组件库就好了。
最近做项目的时候,突然来了个小特殊的需求,根据客户的类型来动态显示底部的tabBar菜单。当时我就有点小懵逼了,这个不是小程序自带的组件么?还要做成动态?这就有点尴尬了
不过也只是一时尴尬而已,然后我就展开了搜索之旅然后发现,官方的组件确实没办法做动态,那咋办,如果真的有这个需求那也是得去处理滴呀~然后也看了有一些做到这效果的方法,那就试一下呗。。其实就是自定义个tabBar的模板,以下是实现:
首先,既然是说自定义组件,那是用到template了。那先在Page里新建个template的文件夹,以便放tabBar的组件。
然后新建个tabBarwxml文件,这里就写下你的tabBar的结构。
下面是tabBar所需要用到的样式,我这里就直接写在全局appwxss了。
然后接下来是js的部分,由于是底部的导航,那肯定是不止一个页面用到的,那这里就可以写在全局的appjs里面方便使用。这里我写了两种tabBar的模板,分别对应来显示
然后在需要用到这个组件的页面上直接调用。比如这里的index页面。
然后去indexjs里面调用tabBar
然后下面是效果图。
就这些。我个人觉得这个自定义导航的用户体验不是很好,能不用就不要用,不过知道下方法也是ok滴!如有发现有错或者不足的地方可以指出,谢谢!
以上就是关于uni-app 自定义组件ADTabBar 底部导航栏 支持中间自定义按钮 支持小程序全部的内容,包括:uni-app 自定义组件ADTabBar 底部导航栏 支持中间自定义按钮 支持小程序、微信小程序自定义tabbar,实现不同角色不同的tabbar、微信小程序开发——列表渲染 & 条件渲染 & tabBar & 页面跳转等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)