更新记录

1.0.0(2026-09-28) 下载此版本

  • 初始版本
  • 外凸圆弧坡(raised-cosine)与栏体零斜率相切交融
  • 选中项弹性滑动过渡,支持跨页面切换动画
  • 两端槽位坡面自适应收窄
  • 全量 CSS 变量主题,theme prop 一行覆盖
  • 安全区避让、单色 SVG mask 图标 ×5

平台兼容性

uni-app(3.8.6)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ √ √ √ √ √ √ √
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
√ √ √ √ √ √ √ √ √ - √ √

uni-app x(3.8.5)

Chrome Safari Android iOS 鸿蒙 微信小程序
√ √ √ √ √ √

其他

多语言 暗黑模式 宽屏模式
× × √

cs-animated-tabbar 动画凸起自定义 TabBar

纯 CSS 变量驱动的自定义底部导航栏组件。选中项带外凸圆弧坡(dome)凸起,坡面采用 raised-cosine 曲线与栏体顶边零斜率相切,平滑交融无接缝;切换时凸起整体弹性滑动跟随选中项(含跨页面切换动画),滑到两端时坡面自适应收窄、不影响样式。

效果截图/录屏:请自行替换本目录 screenshots/(市场提交要求至少 3 张 750px 宽截图)

特性

  • 🎨 全 CSS 变量主题:颜色、高度、圆角、坡形、动画时长等 16 个变量,通过 theme prop 一行覆盖
  • 🏄 外凸圆弧坡:与 tabbar 同色 drop-shadow 跟随合成轮廓,白色/深色页面均自然一体
  • 🧈 弹性过渡:cubic-bezier(.34,1.56,.64,1) 回弹缓动,图标上浮缩放、圆底弹出、颜色渐变
  • 🔀 跨页滑动动画:切页后凸起从上一个选中项位置滑动到新位置,而非"瞬移"
  • 📐 两端自适应:选中第 1/最后一项时坡面自动收窄,始终完整留在栏体内
  • 📱 安全区适配:env(safe-area-inset-bottom) 自动避让
  • 🖼 单色 SVG 图标(mask 方案),选中平滑变色,零图片资源依赖

平台兼容性

H5 App(vue) 微信小程序
✅ 已验证 ✅ 理论支持(未逐一验证) ⚠️ 需较新基础库支持 clip-path: polygon 与 mask data-uri,未验证

依赖 CSS 特性:clip-path: polygon、mask-image(data-uri svg)、CSS 自定义属性、calc()、filter: drop-shadow。

安装

方式一:HBuilderX 中通过插件市场导入(uni_modules 自动注册 easycom)。

方式二:复制 uni_modules/cs-animated-tabbar 到你的项目 uni_modules 目录。

使用

1. pages.json 注册 tabBar(用于 uni.switchTab)

{
  "tabBar": {
    "list": [
      { "pagePath": "pages/home/home", "text": "首页" },
      { "pagePath": "pages/message/message", "text": "消息" }
    ]
  }
}

2. 隐藏原生 tabBar

// App.vue
export default {
  onLaunch() {
    uni.hideTabBar({ animation: false })
  },
}
// 每个 tab 页面的 onShow 中再次隐藏(switchTab 后原生栏会重新显示)
export default {
  onShow() {
    uni.hideTabBar({ animation: false })
  },
}

3. 页面中放置组件(easycom 免 import)

<template>
  <view class="page">
    <!-- 页面内容 -->
    <custom-tabbar :current="0" :tabs="tabs" />
  </view>
</template>

<script>
export default {
  data() {
    return {
      tabs: [
        { path: '/pages/home/home', icon: 'home' },
        { path: '/pages/message/message', icon: 'mail' },
        { path: '/pages/publish/publish', icon: 'chat' },
        { path: '/pages/contacts/contacts', icon: 'heart' },
        { path: '/pages/mine/mine', icon: 'person' },
      ],
    }
  },
}
</script>

页面底部请预留 padding-bottom: 260rpx 左右的空间,避免内容被悬浮栏遮挡。

Props

属性 类型 默认值 说明
current Number 0 当前选中索引,每个 tab 页传自己的索引
tabs Array 示例工程 5 项 导航项数组 { path, icon },path 用于 uni.switchTab,icon 取值:home / mail / chat / heart / person
theme Object {} 覆盖任意 CSS 变量,键为变量名,如 { '--tb-bg': '#111827' }

CSS 变量(theme 可覆盖项)

变量 默认值 说明
--tb-bg #ffffff 栏体背景(凸起坡与栏同色)
--tb-color #4b5563 未选中图标颜色
--icon-active #ffffff 选中图标颜色
--fab-a #ff8a50 选中圆钮渐变起色
--fab-b #ff5722 选中圆钮渐变止色
--fab-glow rgba(255,87,34,.55) 选中圆钮光晕
--tb-height 112rpx 栏体高度
--tb-radius 36rpx 栏体圆角
--dome-w 212rpx 凸起坡面总宽(越大坡越缓)
--dome-h 45rpx 凸起坡面高(越小坡越缓)
--inset 60rpx 图标行左右内缩
--fab-size 80rpx 选中圆钮直径
--icon-size 48rpx 图标尺寸
--tr 0.5s 过渡时长
--bounce cubic-bezier(.34,1.56,.64,1) 回弹缓动曲线

主题示例

<!-- 深色栏 + 蓝色圆钮 -->
<custom-tabbar
  :current="0"
  :tabs="tabs"
  :theme="{
    '--tb-bg': '#1f2937',
    '--tb-color': '#9ca3af',
    '--fab-a': '#38bdf8',
    '--fab-b': '#2563eb',
    '--fab-glow': 'rgba(37, 99, 235, .55)',
  }"
/>

注意事项

  1. 组件为悬浮式导航栏(左右 24rpx 边距 + 底部间隙 + 圆角),如需贴边通栏,可在自定义样式中覆盖 .ctb 的 left/right/bottom(注意 scoped 需用 ::v-deep)或直接改组件源码。
  2. --dome-w / --inset 被覆盖时,两端适配的坡面缩放会自动跟随计算。
  3. 凸起坡面高度需大于圆钮半径,否则选中项会露出坡外;建议 --dome-h ≥ --fab-size / 2 - 10rpx。
  4. 内置图标为 5 个单色 SVG(mask),如需更多图标可在 custom-tabbar.vue 样式区按 .ic-xxx { mask-image: url("data:image/svg+xml,...") } 格式自行扩展。
  5. 跨页滑动动画依赖模块级单例记录上一次索引(common/tabbar-anim.js),无需额外配置。

示例

完整示例见本插件目录同级示例工程(提交市场时附 demo 工程 zip):5 个 tab 页演示默认主题与自定义主题。

许可

MIT

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT License

Copyright (c) 2026

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

暂无用户评论。