uniapp中间带加号的底部选项卡

2,704 阅读4分钟

「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

uniapp中间带加号的底部选项卡

底部选项卡非常常见, 很多小程序和APP底部都多多少少有一个选项卡, 反倒是没有选项卡的不多见. 前两天刚结束一个没有底部选项卡的项目, 项目规模说小不小, 说的大不大的, 页面比较多. 但是这个项目的内容主要从首页点击进去, 首页放不下就点击头像进入到我的页面查看, 这样就不需要底部导航.

但是毕竟不需要底部导航的项目比较少, 并且很多项目会要求在底部导航中间添加一个加号, 可以发布文章或者发布视频(参考抖音底部导航栏加号, 点击就能看到一个大狗头).今天主要写一下uniapp怎么添加底部导航和底部导航中间的加号.

项目添加底部导航(tabBar)

在pages.json中可以设置tabBar, 不仅仅是方便快速开发导航, 更重要的提高性能.

一.注意点

  1. tabBar中的list是一个数组, 数组里最少要有两项,最多五项tab, tab按照数组的顺序排序显示;
  2. 当position为top时, 将不会显示图标icon;
  3. tabbar切换第一次加载时可能渲染不及时, 可以在每个tabbar页面的onLoad声明周期里先弹出一个等待雪花;
  4. tabbar的页面展现过一次后就保留在内存中, 再次切换tabbar页面, 只会触发onShow,不会再触发onLoad;
  • onShow和onLoad两个生命周期函数在初次进入页面都会运行,
  • 非tabbar页面每次点击页面显示, 两个函数同样会运行
  • tabbar页面渲染后数据就保留在内存中. onLoad不会运行,onShow可以运行, 如果页面需要数据变化, 可以放在onShow页面中每次页面显示变化的时候, 就会运行onShow.
  1. 顶部的tabbar目前只仅微信小程序支持;

二.常用的属性

  1. color:tab上的文字默认颜色;
  2. selectedColor: tab上的文字选中时的颜色;
  3. backgroundColor:tab的背景色;
  4. midButton: 中间按钮, 仅在list项为偶数时有效
  5. list:tab列表(list数组中每一项都是一个对象)属性值如下:
    • pagePath: 页面路径, 此页面必须存在(即页面路径必须在pages中先定义)
    • text: tab上的文字
    • iconPath: 图片路径(大小限制40kb, 尺寸建议81px*81px, 不支持网络图片和文字图标, 当position为top时, 此参数无效)
    • selectedIconPath: 选中时图片路径(限制条件同上)
    • visible: 该项是否显示
"tabBar":{
        "color":"#000000",
        "selectedColor":"#007AFF",
        "borderStyle":"black",
        "backgroundColor":"#FFFFFF",
        "iconWidth":"20px",
        "fontSize":"13px",
        "list":[{
                "pagePath":"pages/index/index",
                "iconPath":"static/logo.png",
                "selectedIconPath":"static/logo.png",
                "text":"首页"
        },{
                "pagePath":"pages/search/search",
                "iconPath":"static/logo.png",
                "selectedIconPath":"static/logo.png",
                "text":"搜索"
        },{
                "pagePath":"pages/activity/activity",
                "iconPath":"static/logo.png",
                "selectedIconPath":"static/logo.png",
                "text":"活动"
        },{
                "pagePath":"pages/center/center",
                "iconPath":"static/logo.png",
                "selectedIconPath":"static/logo.png",
                "text":"我的"
        }]
}

(懒得找图片了, 就全部用logo图)

image.png

添加带加号的底部选项卡(midButton)

仅在APP和h5上支持, 小程序等不支持

一.限制条件

  1. 仅在开发APP和h5时能使用, 官方不支持微信小程序等使用midButton. (如果有需求有两种解决办法: a.自定义底部导航,b.劝说甲方不要加加号,c.让同事写个自定义组件,d.上网搜组件(我一直选择第二三种));
  2. 仅在list项为偶数时使用;

二.midButton属性说明

  1. width: 中间按钮的宽度, tabBar其他项的宽度为减去中间按钮宽度后平分, 默认值为与其它项平分宽度(80px);
  2. height: 中间按钮的高度, 可以大于tabBar高度, 达到中间凸起的效果(下面实例中的图片比例是1:1, 所以高度比较高有凸起的效果. 要注意展示其他页面是中间按钮可能会遮挡到页面);
  3. text: 中间按钮的文字(非必填);
  4. iconPath: 中间按钮的图片路径;
  5. iconWidth: 图片宽度(高度等比例缩放)

三.使用midButton属性构建页面

"midButton":{
    "width": "85px",
    "height": "85px",
    "iconPath": "static/release_a.png",
    "iconWidth": "80px"
}

image.png

四.监听中部按钮的点击事件(uni.onTabBarMidButtonTap)

如果想要点击中部按钮跳转新的页面, 可以将跳转写到监听中部按钮的点击事件里

//App.vue
onLaunch: function(){
    uni.onTabBarMidButtonTap((e)=>{
        uni.navigateTo({
            url:'pages/add/add'
        })
    })
}

五.模板

官方推荐的模板,附上链接 底部选项卡模板 模板好不好用不知道, 反正评论挺搞笑的, 新人上手还是可以看一下

image.png