Skip to content
在新窗口打开实时预览

Tabs 标签页 ​

用于同层级内容切换:滚动模式下激活标签自动居中,非滚动模式下标签均分宽度,所有标签保持单行。

平台兼容性 ​

H5App微信小程序支付宝小程序
√√√√

基础用法 ​

current 由父级控制,点击其他标签时 change 返回新索引:

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

const current = ref(0);
const tabs = [{ name: '推荐' }, { name: '新品' }, { name: '热门' }];
</script>

<template>
    <snake-tabs :list="tabs" :current="current" @change="current = $event" />
</template>

均分标签 ​

默认 isScroll=true,标签可左右拖动。少量标签可关闭滚动并均分容器宽度:

vue
<snake-tabs :list="tabs" :current="current" :is-scroll="false" @change="current = $event" />

徽标和隐藏项 ​

vue
<snake-tabs
    :list="[
        { name: '全部', count: 12 },
        { name: '待付款', count: 2 },
        { name: '内部分类', hidden: true }
    ]"
    :current="current"
    @change="current = $event"
/>

name 和 count 可指定对象中的字段名;isDot 可将数字徽标改成圆点。hidden 隐藏标签但不改变其原数组索引。

动态数据 ​

异步更新 list 后,等待视图更新再调用实例的 init(),重新测量标签宽度与滑块位置;如果当前索引已超出新列表范围,应由业务先重置 current。

ts
tabs.value = await getTabs();
current.value = Math.min(current.value, Math.max(tabs.value.length - 1, 0));
await nextTick();
tabsRef.value?.init();

API ​

Props ​

参数说明类型默认值
list标签对象数组TabItem[][]
current当前激活索引number | string0
isScroll是否允许横向拖动booleantrue
height / fontSize高度和字号,数值单位 rpxnumber | string80 / 30
duration动画时长,单位秒number | string0.5
activeColor / inactiveColor激活与未激活文字颜色string主题色 / 主文字色
barWidth / barHeight滑块宽高,数值单位 rpxnumber | string40 / 6
gutter滚动模式单侧内边距,数值单位 rpxnumber | string30
bgColor背景色string#fff
name / count标题与徽标字段名stringname / count
offset徽标 [top, right] 偏移[number, number][5, 20]
isDot / bold / showBar圆点徽标、激活加粗、显示滑块booleanfalse / true / true
activeItemStyle / barStyle激活项和滑块附加样式object{}
itemWidth标签宽度number | stringauto
customClass / customStyle根节点自定义类和样式string / 样式值空

Events ​

事件名触发时机参数
change点击非当前标签index

Methods ​

方法说明
init()重新测量标签布局
clickTab(index)执行与点击标签一致的逻辑
scrollByIndex()按当前激活索引更新滚动位置和滑块

主题变量 ​

变量名说明
--snake-color-primary激活文字和滑块颜色
--snake-color-text未激活文字颜色
--snake-color-error徽标默认背景色

为 uni-app 商城与 CMS 场景设计