uni-app实现类似闲鱼的中间凸起tabbar uni-app自定义菜单

老静大大_5239

老静大大_5239

2026-05-01

783人浏览

原创

uni-app 中用 custom-tab-bar 实现中间凸起按钮需关闭原生 tabbar,pages.json 设 "custom": true,根目录放 components/custom-tab-bar/index.vue,tab 页面 page.json 加 "disablescroll": true;current 值通过 getcurrentpages() 动态计算;凸起按钮用 transform: translatey(12px) + 固定宽高 + z-index: 999 实现,app-plus 需 padding-bottom: env(safe-area-inset-bottom),h5 需监听视口变化;跳转用 uni.switchtab 保状态,非 tabbar 页面需手动触发更新;图标状态用条件 class 控制,交互反馈用纯 css。

uni-app实现类似闲鱼的中间凸起tabbar uni-app自定义菜单

uni-app 中如何用 custom-tab-bar 实现中间凸起按钮

uni-app 官方支持的 custom-tab-bar 是唯一稳定、跨端(iOS/Android/H5)可行的方案。原生 tabbar 不允许中间凸起,必须关掉原生 tabbar,自己实现整个底部栏——不是只改一个按钮,而是整套替换。

关键前提:"mp-weixin" 和 "app-plus" 下必须启用自定义 tabBar;"h5" 端需手动控制显示逻辑(它不走 custom-tab-bar 生命周期)。

  • 在 pages.json 中设置 "tabBar": { "custom": true },否则自定义组件不会被加载
  • 项目根目录下必须存在 components/custom-tab-bar/index.vue(路径和文件名不能错)
  • 所有 tab 页面的 page.json 里要加 "disableScroll": true,避免 iOS 上滑动时 tabbar 被顶起

中间按钮点击后如何跳转并保持高亮状态

自定义 tabbar 没有自动同步激活态,current 值需要手动维护。官方推荐用 uni.$emit + uni.$on 或 pinia/vuex 同步,但最轻量的是通过 getCurrentPages() 动态读取当前页面路径来判断。

示例逻辑(放在 custom-tab-bar/index.vue 的 computed 中):

闲鱼商品精选助手
闲鱼商品精选助手

自动筛选闲鱼个人闲置商品,排除商家与价格区间,精准匹配关键词和规格,按价格升序返回前10件商品。

下载
computed: {
  current() {
    const pages = getCurrentPages()
    const currentPage = pages[pages.length - 1]
    const path = currentPage.route
    return this.list.findIndex(item => item.pagePath === path)
  }
}
  • 不要依赖 uni.getTabBar()(H5 不支持,App 端也常返回 undefined)
  • 中间按钮的 pagePath 必须是合法页面路径,不能是空字符串或外部链接
  • 如果中间按钮需打开非 tabBar 页面(如发布页),记得在 list 配置中留空该位置,用单独的 <view class="add-btn"></view> 覆盖

凸起区域的样式怎么写才不遮挡、不偏移、适配各端

凸起本质是绝对定位 + 负 margin 或 transform,但直接写 bottom: 20px 在不同端表现差异极大:iOS 安全区、Android 虚拟导航栏、H5 浏览器 toolbar 都会影响实际位置。

  • 统一用 transform: translateY(12px)(比 top/bottom 更稳定),配合 z-index: 999
  • 凸起按钮容器宽高建议设为固定值(如 width: 60px; height: 60px),避免 flex 布局下被挤压变形
  • 在 app-plus 下,需额外加 padding-bottom: env(safe-area-inset-bottom) 给底部留白,否则可能被遮挡
  • H5 端需监听 window.innerHeight 变化,动态调整 bottom 值(因为地址栏展开/收起会改变视口高度)

为什么点击中间按钮后 tabbar 图标闪烁或状态丢失

这是最常见的问题,根本原因是:中间按钮触发的是 uni.navigateTo(非 tabBar 页面),导致页面栈变化,而自定义 tabbar 组件本身没重绘或未监听页面栈变更。

  • 确保中间按钮使用 uni.switchTab 跳转到已配置在 tabBar.list 中的页面;若必须跳非 tabBar 页面,请在目标页面 onLoad 中主动 uni.$emit('updateTabBar') 通知组件刷新
  • 不要在 custom-tab-bar 组件里调用 this.$forceUpdate() —— 它在 App 端无效,在 H5 端可能引发循环渲染
  • 图标状态建议全用条件 class 控制(如 :class="{ 'active': current === 2 }"),而不是靠 v-if 切换整个 icon 标签

凸起按钮的交互反馈(比如按下缩放、点击波纹)必须用纯 CSS 实现,避免引入 JS 动画库——小程序环境对 requestAnimationFrame 支持有限,容易卡顿。真正难的不是画出那个凸起,而是让它的位置、状态、响应在三个平台都一致。这点没有银弹,只能逐端调试,记下每个平台的 offset 偏差值。

相关文章

闲鱼
闲鱼

闲鱼是一个社区化的二手闲置交易市场,不仅支持各种同城及线上的担保交易,更安全,同时还有最专业的放心购二手商家,让你轻松在这买卖二手闲置。有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

uni-app 闲鱼

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2263

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4843

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5970

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5438

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

763

5

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

60

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

40

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

40

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

40

26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习