5***@qq.com
5***@qq.com
  • 发布:2023-06-02 11:33
  • 更新:2023-06-02 16:31
  • 阅读:1480

实现底部tab栏中间突起

分类:uni-app

需求

项目用uniapp开发,突然收到一个需求,实现底部tab栏突起的效果

实现

为了实现这样的效果,先查了官方文档,给出了两个方案
1、自定义实现tab栏展示
因为主要开发app,为了体验性还是决定用官方原生tab
2、按官方文档配置tabbar
在官方文档中,可以配置tab栏中间突起;
原文:中间带+号的tabbar模板例子,参考。可跨端,但+号不凸起。如需中间凸起,配置tabbar的midButton。
官方文档
但是有个问题,点击中间不是一个新的页面,还是触发点击事件,在app.vue 中监听。
我的想法是先写一个页面,然后在点击事件中做跳转

export default {  
        onLaunch: function() {  
            // 点击中间按钮  
            uni.onTabBarMidButtonTap(()=>{  
                uni.navigateTo({  
                    url:'/pages/index/index'  
                })  
            })  
                }  
}
"pages": [   
            "path" : "pages/index/home",  
            "style" :                                                                                      
            {  
                "navigationBarTitleText": "首页",  
                "enablePullDownRefresh": false  
            }  

        }  
        {  
            "path" : "pages/index/index",  
            "style" :                                                                                      
            {  
                "navigationBarTitleText": "uniapp",  
                "enablePullDownRefresh": false  
            }  
        }  
    ],

但是明显问题来了,我是切换tab页,不是跳转到新的页面,这样会存在明显的页面跳转动画还有返回。
那我把页面加到page.json的 tabbar中,但这样就会在底部多一个标签选项。
正在我百思不得其解的时候,我注意到tabbar有个属性,visible:是否显示
这样好办了,我把visible设为false,监听改为

uni.onTabBarMidButtonTap(()=>{  
    uni.switchTab({  
        url:'/pages/index/index'  
    })  
})

page.json tabbar设置

    "tabBar": {  
        "borderStyle": "black",  
        "backgroundColor": "#fff",  
        "color": "#8F8F94",  
        "selectedColor": "#1EC2A0",  
        "list": [{  
                    "pagePath": "pages/index/home",  
                    "iconPath": "static/home.png",  
                    "selectedIconPath": "static/homeSelected.png",  
                    "text": "首页"  
                },  
                {  
                    "pagePath": "pages/index/market",  
                    "iconPath": "static/market.png",  
                    "selectedIconPath": "static/market.png",  
                    "text": "商城"  
                },  
                // #ifdef APP-PLUS  
                {  
                    "pagePath": "pages/index/index",  
                    "iconPath": "static/fabu.png",  
                    "selectedIconPath": "static/fabu.png",  
                    "text": "发布",  
                    "visible": false  
                },  
                // #endif  
                // #ifndef APP-PLUS  
                {  
                    "pagePath": "pages/index/index",  
                    "iconPath": "static/fabu.png",  
                    "selectedIconPath": "static/fabu.png",  
                    "text": "发布"  
                },  
                // #endif  
                {  
                    "pagePath": "pages/index/cart",  
                    "iconPath": "static/shopCart.png",  
                    "selectedIconPath": "static/shopCartSelect.png",  
                    "text": "购物车"  
                },  
                {  
                    "pagePath": "pages/index/mine",  
                    "iconPath": "static/mine.png",  
                    "selectedIconPath": "static/mineSelected.png",  
                    "text": "我的"  
                }  
            ],  
        "midButton": {  
            "iconPath": "static/fabu.png",  
            "iconWidth": "60px",  
            "height": "65px"  
        }  
    }

这样就是实现了中间tab页面突起图标加跳转

源码已上传至附件,需要的可以自行下载

1 关注 分享
9***@qq.com

要回复文章请先登录注册

5***@qq.com

5***@qq.com (作者)

回复 9***@qq.com :
那可能是ide的问题
2023-06-02 16:31
9***@qq.com

9***@qq.com

回复 5***@qq.com :
我是指IED没有给出代码提示
2023-06-02 15:51
9***@qq.com

9***@qq.com

回复 5***@qq.com :
为什么我的list对象中没有visible字段?HBuilderX版本是3.8.3。
2023-06-02 15:48
5***@qq.com

5***@qq.com (作者)

回复 9***@qq.com :
list其实是偶数,因为将其中visible一个设为false 后就不算了
2023-06-02 14:34
9***@qq.com

9***@qq.com

midButton不是仅在 list 项为偶数时有效吗?能详细说一下是怎么实现的吗?或者给一个demo?
2023-06-02 12:01