# mx-tab 标签页
选项卡组件,用于在不同的内容区域之间进行切换。
# 引入
在app.json或index.json中引入组件,详细介绍见快速上手
"usingComponents": {
"mx-tab": "/miniprogram_npm/m-ui/mx-tab/index",
"mx-tabs": "/miniprogram_npm/m-ui/mx-tabs/index"
}
# 小程序码
可使用微信扫码查看小程序码
#
# 代码演示
# 基本用法
通过active设定当前激活标签对应的索引值,默认情况下启用第一个标签。
<mx-tabs active="{{ active }}" bind:change="onChange">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
<mx-tab title="标签 4">内容 4</mx-tab>
</mx-tabs>
Page({
data: {
active: 1,
},
onChange(event) {
wx.showToast({
title: `切换到标签 ${event.detail.name}`,
icon: 'none',
});
},
});
# 通过名称匹配
在标签指定name属性的情况下,active的值为当前标签的name(此时无法通过索引值来匹配标签)。
<mx-tabs active="a">
<mx-tab title="标签 1" name="a">内容 1</mx-tab>
<mx-tab title="标签 2" name="b">内容 2</mx-tab>
<mx-tab title="标签 3" name="c">内容 3</mx-tab>
</mx-tabs>
# 横向滚动
多于 5 个标签时,Tab 可以横向滚动。
<mx-tabs active="{{ active }}">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
<mx-tab title="标签 4">内容 4</mx-tab>
<mx-tab title="标签 5">内容 5</mx-tab>
<mx-tab title="标签 6">内容 6</mx-tab>
</mx-tabs>
# 禁用标签
设置disabled属性即可禁用标签。如果需要监听禁用标签的点击事件,可以在mx-tabs上监听disabled事件
<mx-tabs bind:disabled="onClickDisabled">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2" disabled>内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
</mx-tabs>
Page({
onClickDisabled(event) {
wx.showToast({
title: `标签 ${event.detail.name} 已被禁用`,
icon: 'none',
});
},
});
# 样式风格
Tab支持三种样式风格:line和card,button,默认为line样式,可以通过type属性修改样式风格。
<mx-tabs type="card">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
</mx-tabs>
<mx-tabs type="button">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
</mx-tabs>
# 点击事件
可以在mx-tabs上绑定click事件,在回调参数的event.detail中可以取得被点击标签的标题和标识符。
<mx-tabs bind:click="onClick">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
</mx-tabs>
Page({
onClick(event) {
wx.showToast({
title: `点击标签 ${event.detail.name}`,
icon: 'none',
});
},
});
# 自定义样式
通过color来定义选中标签样式,type="card"可以通过titleActiveColor来定义文案颜色。
<mx-tabs active="{{ 0 }}" color="#FF2D84">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
</mx-tabs>
<mx-tabs color="#FF6A4C" titleActiveColor="#fff" type="card">
<mx-tab wx:for="{{ card2 }}" wx:key="index" title="{{ item.title }}"> </mx-tab>
</mx-tabs>
# 粘性布局
通过sticky属性可以开启粘性布局,粘性布局下,当 Tab 滚动到顶部时会自动吸顶
<mx-tabs sticky>
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
<mx-tab title="标签 4">内容 4</mx-tab>
</mx-tabs>
# 切换动画
可以通过animated来设置是否启用切换 tab 时的动画。
<mx-tabs animated>
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
<mx-tab title="标签 4">内容 4</mx-tab>
</mx-tabs>
# 滑动切换
通过swipeable属性可以开启滑动切换标签页。
<mx-tabs swipeable>
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
<mx-tab title="标签 4">内容 4</mx-tab>
</mx-tabs>
# 嵌套 popup
如果将 mx-tabs 嵌套在 mx-popup 等会隐藏内容的组件或节点内,当 mx-tabs 显示时下划线将不会正常显示。
此时可以通过使用 wx:if 手动控制 mx-tabs 的渲染来规避这种场景。
<mx-popup show="{{ show }}">
<mx-tabs wx:if="{{ show }}">
<mx-tab title="标签 1">内容 1</mx-tab>
<mx-tab title="标签 2">内容 2</mx-tab>
<mx-tab title="标签 3">内容 3</mx-tab>
<mx-tab title="标签 4">内容 4</mx-tab>
</mx-tabs>
</mx-popup>
# API
# Tabs Props
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
type | 样式风格,可选值为card button | string | line |
color | 标签主题色 | string | #000 |
active | 当前选中标签的标识符 | string,number | 0 |
duration | 动画时间,单位秒 | number | 0.3 |
line-width | 底部条宽度,默认单位px | string,numbar | 40px |
line-height | 底部条高度,默认单位px | string,number | 3px |
animated | 是否开启切换标签内容时的转场动画 | boolean | false |
border | 是否展示外边框,仅在 line 风格下生效 | boolean | false |
ellipsis | 是否省略过长的标题文字 | boolean | true |
sticky | 是否使用粘性定位布局 | boolean | false |
swipeable | 是否开启手势滑动切换 | boolean | false |
lazy-render | 是否开启标签页内容延迟渲染 | boolean | true |
offset-top | 粘性定位布局下与顶部的最小距离,单位px | number | - |
swipe-threshold | 滚动阈值,标签数量超过阈值且总宽度超过标签栏宽度时开始横向滚动 | number | 5 |
title-active-color | 标题选中态颜色 | string | - |
title-inactive-color | 标题默认态颜色 | string | - |
z-index | z-index 层级 | number | 1 |
# Tab Props
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
name | 标签名称,作为匹配的标识符 | string,number | 标签的索引值 |
title | 标题 | string | '' |
disabled | 是否禁用标签 | boolean | false |
dot | 是否显示小红点 | boolean | false |
info | 图标右上角提示信息 | string,number | - |
title-style | 自定义标题样式 | string | - |
# Tabs Slot
名称 | 说明 |
---|---|
nav-left | 标题左侧内容 |
nav-right | 标题右侧内容 |
# Tabs Slot
名称 | 说明 |
---|---|
- | 标签页内容 |
# Tabs Event
事件名 | 说明 | 参数 |
---|---|---|
bind:click | 点击标签时触发 | name:标签标识符,title:标题 |
bind:change | 当前激活的标签改变时触发 | name:标签标识符,title:标题 |
bind:disabled | 点击被禁用的标签时触发 | name:标签标识符,title:标题 |
bind:scroll | 滚动时触发 | { scrollTop: 距离顶部位置, isFixed: 是否吸顶 } |
# Tabs 外部样式类
名称 | 说明 |
---|---|
custom-class | 根节点样式类 |
nav-class | 标签栏样式类 |
tab-class | 根节点样式类 |
nav-class | 标签样式类 |
tab-active-class | 标签激活态样式类 |
# 方法
通过 selectComponent 可以获取到 Tabs 实例并调用实例方法。
名称 | 说明 |
---|---|
resize | 外层元素大小或组件显示状态变化时,可以调用此方法来触发重绘 |