Skip to content

Tabbar 底部导航栏 ​

查看 sn-tabbar 的 2.0 版本差异

基础用法 ​

  • 底部导航栏,支持字体图标、图片、文字与角标,样式自由定制
  • 由 sn-tabbar-item 子项构成,通过 data(SnTabbarItem)配置自动渲染,无需手动引入子项组件
  • 支持子项拦截鉴权(interceptor)与角标(badge)
  • 支持固定底部(fixed)与内嵌(fixed=false)两种模式,固定模式自动预留底部安全区高度
  • 支持 tab1~tab10 子页面插槽,最多 10 项,索引从 1 开始
vue
<template>
	<sn-tabbar :data="data"></sn-tabbar>
</template>

更多演示请下载 demo 查看

子页面与占位高度 ​

fixed 模式使用固定定位,组件不会自动占位,需通过 v-model:height 拿到实际高度自行放置占位(如 sn-gap),占位变量禁止手动修改。

vue
<template>
	<sn-gap :height="tabbarHeight"></sn-gap>
	<sn-tabbar v-model:height="tabbarHeight" :data="data"></sn-tabbar>
</template>

<script setup>
// 底部导航栏占位高度,由组件输出,禁止手动修改
const tabbarHeight = ref('0px')
// 底部导航栏数据,与插槽一 一匹配
const data = [...] as SnTabbarItem[]
</script>

数据项 SnTabbarItem ​

data 为 SnTabbarItem[],字段如下:

sn-tabbar 标签栏项数据。

名称类型必填描述
textString否文本内容
iconString否图标名
activeIconString否选中状态的图标名,缺省时沿用 icon
activeTextString否选中状态的文本,缺省时沿用 text
imageString否图片地址,设置后替代图标显示
activeImageString否选中状态的图片地址,缺省时沿用 image
interceptor(() => Boolean)否切换拦截函数,返回 false 阻止本次切换
badgeSnBadgeParams否角标配置

内置 sn-badge 的组件可通过 badgeConfig 属性配置徽标参数。

名称类型必填描述
valueNumber否显示的值(仅 number 模式)
maxNumber否最大值,超过显示 max+
sizeString否大小
offsetString否偏移量(transform)
mode'number' | 'text' | 'dot'否模式
textString否文本内容(仅 text 模式)
showZeroBoolean否是否显示 0
textColorString否文字颜色
bgColorString否背景颜色

属性 ​

参数说明类型默认值可选值
v-model:height底部导航栏实际高度(fixed 模式含安全区高度),供外部占位String''-
data底部导航栏数据,每一项与插槽一 一匹配,最多 10 项Array<SnTabbarItem>[]-
index首次加载时显示的页面索引(从 1 开始)Number1-
fixed是否固定底部Booleantruetrue | false
showPages是否显示子页面插槽内容Booleantruetrue | false
imageSize子项图片大小($ 简写乘字体乘数)String | Number''-
padding导航栏内边距($ 简写乘内边距乘数)String | Number'$10'-
margin导航栏外边距String | Number'0px'-
bgColor导航栏背景颜色String$front-
itemBorderRadius子项圆角大小,组件根据导航栏圆角自动计算最合适值String | Number--
itemPadding子项内边距String | Number'0px'-
itemSpacing各子项之间的间距String | Number'0px'-
itemBgColor子项背景颜色Stringvar(--sn-transparent)-
itemActiveBgColor选中子项的背景颜色Stringvar(--sn-transparent)-
border导航栏边框String1px solid var(--sn-line)-
borderRadius导航栏圆角大小String | Number'0'-
textColor子项文本颜色String$text-
textSize子项文本大小String | Number$11-
activeTextColor选中子项文本颜色String$primary-
iconColor子项图标颜色String$text-
iconSize子项图标大小String | Number$22-
activeIconColor选中子项图标颜色String$primary-
disabled是否禁用整个导航栏Booleanfalsetrue | false
hoverStyle子项按压态样式UTSJSONObject | String'background: var(--sn-info);'-
hoverStartTime按压生效延迟(单位 ms)Number50-
hoverStayTime按压保持时长(单位 ms)Number0-
hoverTransTime按压过渡时长(单位 ms,$ 简写乘动画乘数)String | Number''-
hoverStopPropagation按压事件是否阻止冒泡Booleanfalsetrue | false
customStyle自定义导航栏样式UTSJSONObject | String''-
customContainStyle自定义容器样式(包含子页面与底部导航栏)UTSJSONObject | String''-

事件 ​

名称类型说明
change(index: number) => Void页面切换时触发,index 从 1 开始
heightchange(height: number) => Void底部导航栏实际高度变化时触发(fixed 模式含安全区高度)

方法 ​

名称参数返回值描述
changeToIndex(index: number)-切换到指定索引的页面,索引值即为插槽名称(如 #tab1 的索引为 1)

插槽 ​

名称说明
tab1 ~ tab10第 n 个子页面,须与 data 项一 一对应

sn-tabbar-item 属性 内部使用 ​

sn-tabbar 的子项组件,由 data 自动渲染,无需手动引入;下列属性均由 sn-tabbar 按组配置逐项下发。

参数说明类型默认值可选值
data该项的数据对象SnTabbarItemnull-
index该项在 data 中的索引Number0-
active是否为当前选中项Booleanfalsetrue | false
disabled是否禁用该项(禁用后不触发 click)Booleanfalsetrue | false
isFirst是否为第一项(首尾圆角与间距处理用)Booleanfalsetrue | false
isLast是否为最后一项(首尾圆角与间距处理用)Booleanfalsetrue | false
itemPadding子项内边距(支持 $ 简写)String0px-
itemBorderRadius子项圆角(支持 $ 简写)String0px-
itemBgColor子项背景颜色String''-
itemActiveBgColor选中子项背景颜色String''-
textColor子项文本颜色String''-
activeTextColor选中子项文本颜色String''-
textSize子项文本大小(支持 $ 简写)String''-
iconColor子项图标颜色String''-
activeIconColor选中子项图标颜色String''-
iconSize子项图标大小(支持 $ 简写)String''-
imageSize子项图片大小(data 项设置 image 时生效,支持 $ 简写)String35px-
itemSpacingHalf子项间距的一半(首尾对齐用,支持 $ 简写)String0px-
hoverStyle子项按压态样式UTSJSONObject | Stringbackground: var(--sn-info);-
hoverStartTime按压生效延迟(单位 ms)Number50-
hoverStayTime按压保持时长(单位 ms)Number0-
hoverTransTime按压过渡时长(单位 ms,$ 简写乘动画乘数)String | Number''-
hoverStopPropagation按压事件是否阻止冒泡Booleanfalsetrue | false

sn-tabbar-item 事件 内部使用 ​

名称类型说明
click(index: number) => Void点击子项时触发,index 为该项在 data 中的索引(禁用项不触发)

使用 MIT 协议