跳到主要内容

标签页 Tabs

选项卡切换组件,用于在不同的内容区域之间进行切换

安装使用

{
// 原生小程序
"usingComponents": {
"ti-tabs": "@titian-design/weapp/tabs/index"
},
// titan-cli搭建的项目
"usingComponents": {
"ti-tabs": "platform://titian-mp/ti-tabs"
}
}

用法示例

基础用法

<ti-tabs tabs="{{ tabs }}" />

自定义字段名称

<ti-tabs tabs="{{ tabs }}" tab-key="name" />

主体内容使用插槽,内置swiper

<ti-tabs tabs="{{ tabs }}" use-slot>
<block wx:for="{{ tabs }}" wx:key="index">
<view slot="tab-content-{{ index }}">- {{ item }} -</view>
</block>
</ti-tabs>

设置单屏平铺显示的tab数量

当实际tabs总量小于设置的count值时,默认按当前总数平分整个屏幕。可以设置autoGap为false, 取消默认效果。

<ti-tabs tabs="{{ tabs1 }}" count="{{ 3 }}" />
<ti-tabs tabs="{{ tabs2 }}" count="{{ 3 }}" />
<ti-tabs tabs="{{ tabs2 }}" count="{{ 3 }}" auto-gap="{{ false }}" />

设置每个tab的宽度

当实际tabs总宽度小于屏幕宽度时,默认按当前总数平分整个屏幕。可以设置autoGap为false, 取消默认效果。

<ti-tabs tabs="{{ tabs1 }}" tab-width="{{ 150 }}" />
<ti-tabs tabs="{{ tabs2 }}" tab-width="{{ 150 }}" />
<ti-tabs tabs="{{ tabs2 }}" tab-width="{{ 150 }}" auto-gap="{{ false }}" />

设置相邻tab之间的间隔

当实际tabs总宽度小于屏幕宽度时,默认会增加tab之间间隙,到达撑满一屏。可以设置autoGap为false, 取消默认效果。

<ti-tabs tabs="{{ tabs1 }}" gap="{{ 50 }}" />
<ti-tabs tabs="{{ tabs2 }}" gap="{{ 50 }}" />
<ti-tabs tabs="{{ tabs2 }}" gap="{{ 50 }}" auto-gap="{{ false }}" />

tabs组件内置吸顶

<ti-tabs tabs="{{ tabs }}" offset-top="{{ 50 }}" />

禁用项

<ti-tabs tabs="{{ tabs }}" disabled-tabs="{{ [3] }}" />

风格设置

<ti-tabs tabs="{{ tabs }}" variant="pure" />
<ti-tabs tabs="{{ tabs }}" variant="block" />
<ti-tabs tabs="{{ calendarTabs }}" variant="calendar" />
<ti-tabs tabs="{{ multiTabs }}" variant="multi" />

风格线设置

<ti-tabs tabs="{{ tabs }}" divider="default" />
<ti-tabs tabs="{{ tabs }}" divider="line" />
<ti-tabs tabs="{{ tabs }}" divider="shadow" />

ti-tabs API

属性 Properties

名称类型必填默认值说明备注
variantstringpure标签页的风格,可选值:block pure calendar multi-
tabsarray | Array<Option>-数据项, ['首页', '我的'] 或者 [{label: '首页'},{label: '我的'}]-
active-tabnumber | string0选中项索引,或者 tab-key 对应的值-
disabled-tabsarray-禁用的数据项-
durationnumber500滑动动画时长-
dividerstring-分割线类型,可选值:line shadow default-
stickybooleanfalse是否有吸顶效果-
offset-topnumber0吸顶距离,单位px-
use-pure-cssbooleanfalse使用css的position: sticky实现-
countnumber5单屏展示的菜单数量-
tab-widthnumber-每个菜单的宽度,单位 px,设置此项后 count 则无效-
gapnumber-1tab(文字)间距,单位 px,设置此项后 tab-width 和 count 无效-
auto-gapbooleantrue当 tab 总宽度不够一屏,采用平铺模式-
use-slotbooleanfalse是否启用插槽,即内置 swiper 组件-
ext-stylestring | Record<string, string>-根节点样式-
tab-keystringlabeltabs 如果是对象数组,对应每项的关键词 key-
aliasRecord<string, string>-数据项默认字段名label description tag date的别名,用于自定义数据,可替代tabKey属性-
scroll-with-animationbooleantruetab切换,是否使用过度动画-
async-changebooleanfalse是否采用受控模式,异步设置active-tab-

Option

API 中的 tabs 可以为一个对象数组,数组中的每一个对象有以下 key:

名称类型必填默认值说明备注
labelstring-标题-
descriptionstring-variant设置calendar或者multi可用,标题下描述文字-
tagstring-variant设置multi可用,最下方标签,如设置日期标签国庆节等-
datestring-variant设置multi可用,设置日期如:2022-12-01,如果是当前日期,下标tag将会写成当前-

事件 Events

名称参数列表描述备注
bind:change(e: WechatMiniprogram.CustomEvent<{index: number, item: Record<string, string>}>) => void当前激活的标签-
bind:fixed(e: WechatMiniprogram.CustomEvent<{isFixed: boolean}>) => void使用吸顶功能是,吸顶状态改变是触发-
bind:click(e: WechatMiniprogram.CustomEvent<{index: number, item: Record<string, string>}>) => void点击tab项时触发-
bind:disabled(e: WechatMiniprogram.CustomEvent<{index: number, item: Record<string, string>}>) => void点击禁用的tab项时触发-

插槽 Slots

名称说明备注
tab-content-${index}每个标签页展示项,index为tabs的索引,如果使用插槽请用可扩展样式类名swiper-class设置容器高度。-

外部样式类 External Classes

名称说明备注
tab-classtab容器样式名-
tab-active-class激活项tab容器样式名-
tab-text-classtab文字样式名可设置缺省或者截断
tab-text-active-class激活项tab文字样式名
swiper-classswiper 容器样式名-
tabs-classtabs 样式名-
tabs-mark-class当前项底部标志类名如果修改下划线的宽度,在自定义样式类里加--tabs-mark-width: 10rpx
ext-class根节点样式类名-

CSS 变量 CSS Variable

变量默认值说明备注
--tabs-background-color#ffftabs背景颜色-
--tabs-swiper-background-color#ffftabs下方swiper内容部分背景颜色-
--tabs-tab-height88rpxtabs高度-
--tabs-swiper-height150rpxtabs下方swiper内容部分高度-
--tabs-tab-color#757575tabs文字颜色-
--tabs-tab-font-size28rpxtabs文字字号-
--tabs-active-text-color#212121tabs激活项文字颜色-
--tabs-active-line-color#fa2c19tabs激活项下标颜色,默认跟随主题色-