更新记录

1.0.1(2026-04-09) 下载此版本

优化滑动效果

修复已知问题

更新使用文档

1.0.0(2024-08-22) 下载此版本

首次发布


平台兼容性

uni-app(4.36)

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

zero-tabs 组件

zero-tabs 是一个支持滚动、自动居中、胶囊高亮、徽章和吸顶的标签选项卡组件,符合 easycom 规范,使用 uni_modules 引入后可直接使用。

一. 组件特性

  • 兼容 linecapsulenone 三种模式
  • 选中项自动滚动到可视区域中间
  • 支持少量 tab 自动均分布局
  • 支持图标、禁用态和 badge 徽章
  • 支持异步切换和吸顶占位
  • 支持 lineOptionscapsuleOptions 两类高亮配置
  • 内部不再直接修改传入的 tabs 数据

二. 参数说明

参数 类型 默认值 说明
tabs Array [] 标签数组,元素至少包含 name 字段,可选 iconiconSizedisabledbadge
currentIndex Number 0 当前选中项索引
backgroundColor String 'transparent' 背景色
height Number 80 组件高度,单位 rpx
padding String '0 32rpx' 每个 tab 的内边距
defaultColor String '#333333' 默认文字颜色
selectColor String '#0396FF' 选中文字颜色,line 模式下同时作为滑块颜色
size Number 32 文字字号,单位 rpx
iconSize Number 16 默认图标尺寸,单位 px
customLineWidth Number 0 旧版兼容字段,等价于 lineOptions.width,单位 px,建议优先使用 lineOptions
lineGap Number 0 旧版兼容字段,等价于 lineOptions.gap,单位 rpx,建议优先使用 lineOptions
lineOptions Object {} line 模式配置,见下方说明
autoJustify Boolean false 当所有 tab 总宽度小于容器宽度时是否自动均分
needSticky Boolean false 是否启用吸顶
offsetTop Number 0 吸顶距离,单位 rpx
fixedHolder Boolean true 吸顶时是否渲染占位盒子
async Boolean false 是否启用异步切换,开启后需由父组件更新 currentIndex
showSlider Boolean true 是否显示滑块
slider String 'line' 滑块模式,可选 linecapsulenone
capsuleOptions Object {} 胶囊模式配置,见下方说明
zIndex Number 1 吸顶层级
showBadge Boolean false 是否显示 badge
badgeOptions Object {} badge 配置,见下方说明

capsuleOptions

参数 类型 默认值 说明
width Number 0 胶囊宽度,单位 px0 表示跟随当前项宽度
height Number 0 胶囊高度,单位 rpx0 表示默认使用组件高度减去上下边距
radius Number 0 胶囊圆角,单位 rpx0 表示使用全圆角
color String '#0396FF' 胶囊背景色

lineOptions

参数 类型 默认值 说明
width Number 0 线条宽度,单位 px0 表示跟随当前项宽度
height Number 6 线条高度,单位 rpx
radius Number 999 线条圆角,单位 rpx
bottom Number 6 线条距离 tab 底部的偏移,单位 rpx
color String '' 线条颜色,不传则使用 selectColor
gap Number 0 文字内容额外向上让出的距离,单位 rpx

badgeOptions

参数 类型 默认值 说明
mode String 'number' number 数字模式,dot 圆点模式
color String 'rgba(255, 255, 255, 0.3)' 默认背景色
activeColor String '' 选中时背景色,不传则沿用 color
textColor String '#ffffff' 文字颜色
size Number 20 文字字号,单位 rpx
dotSize Number 12 圆点模式尺寸,单位 rpx

三. 事件

事件名 返回值 说明
change (index, item) 点击 tab 后触发。默认会先执行居中滚动,再触发 change

四. 使用示例

<template>
  <view class="tabs">
    <view class="zero-nav-title">基础使用</view>
    <zero-tabs
      :currentIndex="currentIndex"
      :tabs="categoryList"
      :lineOptions="{ width: 36, height: 8, bottom: 8, gap: 12 }"
      @change="handleTabsChange"
    />

    <view class="zero-nav-title">胶囊模式</view>
    <zero-tabs
      :currentIndex="currentIndex"
      :tabs="categoryList"
      slider="capsule"
      selectColor="#ffffff"
      :capsuleOptions="{ color: '#465CFF', radius: 40 }"
      @change="handleTabsChange"
    />

    <view class="zero-nav-title">无滑块 + badge</view>
    <zero-tabs
      :currentIndex="currentIndex"
      :tabs="badgeTabs"
      slider="none"
      :showBadge="true"
      @change="handleTabsChange"
    />
  </view>
</template>

<script setup lang="ts">
  import { ref } from "vue";

  const currentIndex = ref(0);

  const categoryList = ref([
    { name: "推荐" },
    { name: "手机数码" },
    { name: "家用电器", disabled: true },
    { name: "电脑办公" },
    { name: "家居家装" },
    { name: "美妆个护" },
    { name: "服饰鞋包" },
    { name: "母婴童装" },
  ]);

  const badgeTabs = ref([
    { name: "消息", badge: 3 },
    { name: "通知", badge: 18 },
    { name: "系统", badge: 0 },
  ]);

  const handleTabsChange = (index: number) => {
    currentIndex.value = index;
  };
</script>

<style scoped lang="scss">
  .zero-nav-title {
    margin: 40rpx 0 20rpx 20rpx;
  }
</style>

五. 注意事项

  • 默认点击流程是“先滚动居中,再切换高亮并触发 change
  • asynctrue 时,组件不会自动更新选中态,需要父组件在 change 后自行更新 currentIndex
  • lineOptions.widthcapsuleOptions.width 的单位是 px,其他尺寸配置默认使用 rpx

插件预览:

code

小程序搜索: 零技术

预览的小程序不一定能及时更新当前插件

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议