Tabbar
组件类型:UxTabbarComponentPublicInstance
支持正常形状和凹形,支持上下滚动、左右推压、水滴动画效果
平台兼容性
UniApp X
Android | iOS | web | 鸿蒙 Next | 小程序 |
---|---|---|---|---|
√ | √ | √ | x | √ |
UniApp Vue Nvue
Android | iOS | web | 鸿蒙 Next | 小程序 |
---|---|---|---|---|
x | x | √ | x | x |
Props
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
center | Slot | 中间凸起按钮插槽 | |
type | String | default | 类型 |
anim | String | none | 动效类型 |
index | Number | 0 | 默认选择下标 |
data | UxTab[] | tab列表(导入:import{UxTab}from'@/uni_modules/ux-frame/libs/types/types.uts') | |
selectedColor | String | $ux.Conf.fontColor | 选中颜色 |
unselectedColor | String | $ux.Conf.fontColor | 未选中颜色 |
selectedColorDark | String | 深色none-不显示,auto-自动适配深色模式,其他-颜色 | |
unselectedColorDark | String | 深色none-不显示,auto-自动适配深色模式,其他-颜色 | |
iconSize | Any | 18 | 图标大小单位px |
fontSize | Any | 12 | 字体大小单位px |
fontBold | Boolean | false | 字体加粗 |
customFont | String | 网络字体路径或自定义字体路径 | |
customFamily | String | 自定义字体family | |
border | Boolean | false | 显示上边框 |
borderColor | String | $ux.Conf.borderColor | 上边框颜色 |
corner | Any | 0 | 圆角 |
background | String | #FFFFFF | 背景色 |
backgroundDark | String | 深色none-不显示,auto-自动适配深色模式,其他-颜色 | |
centerColor | String | #FFFFFF | 中间按钮背景色 |
showBlur | Boolean | false | 开启模糊背景仅支持normal类型 |
blurRadius | Number | 10 | 模糊半径 |
blurAlpha | Number | 0.5 | 模糊透明度 |
zIndex | Number | 10000 | 层级z-index |
hover | Boolean | true | 显示点击态 |
fixed | Boolean | true | 固定位置 |
type
值 | 说明 |
---|---|
default正常 | |
special特殊 |
anim
值 | 说明 |
---|---|
none无 | |
scroll上下滚动 | |
roll水平滚动 | |
push左右推压 | |
water水滴 |
selectedColorDark
值 | 说明 |
---|---|
none不显示 | |
auto自动适配深色模式 | |
color其他颜色 |
unselectedColorDark
值 | 说明 |
---|---|
none不显示 | |
auto自动适配深色模式 | |
color其他颜色 |
backgroundDark
值 | 说明 |
---|---|
none不显示 | |
auto自动适配深色模式 | |
color其他颜色 |
Events
事件名 | 说明 | 参数 |
---|---|---|
click | 按钮点击时触发 | |
center | 中间按钮点击时触发 | |
change | 当前选择下标改变时触发 |
示例代码
html
<template>
<ux-page :stack="showDoc">
<ux-navbar :title="title" :border="false" :fixed="true" :show-blur="true" :z-index="100000">
<template v-slot:right>
<!-- #ifndef MP -->
<ux-button theme="text" icon="/static/tip.png" :icon-size="22" @click="onDoc()"></ux-button>
<!-- #endif -->
</template>
</ux-navbar>
<ux-scroll>
<ux-placeholder :navbar="true"></ux-placeholder>
<ux-card direction="column" icon="flag-filled" title="底部导航栏" :bold="true">
<ux-text text="支持正常形状和凹形,支持上下滚动、左右推压、水滴动画效果"></ux-text>
</ux-card>
<ux-card direction="column" icon="arrowright" title="无动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="none" :data="tabs" :corner="25" :border="false" background="#f9f9f9"></ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="上下滚动动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="scroll" :data="tabs" :border="false" background="#f9f9f9"></ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="推压动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="push" :data="tabs" background="#f9f9f9"></ux-tabbar>
</ux-card>
<!-- #ifndef MP -->
<ux-card direction="column" icon="arrowright" title="水滴动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="water" :data="tabs" :corner="12" :border="false" background="#f9f9f9"></ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="凹形-无动画" :bold="true">
<ux-tabbar :fixed="false" type="special" anim="none" :data="tabs" :corner="12" :border="false" background="#f9f9f9" @center="onCenter">
<template v-slot:center>
<ux-icon type="plus" :size="36" color="black"></ux-icon>
</template>
</ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="凹形-上下滚动动画" :bold="true">
<ux-tabbar :fixed="false" type="special" anim="scroll" :data="tabs" :corner="20" :border="false" background="#f9f9f9" @center="onCenter">
<template v-slot:center>
<ux-icon type="plus" :size="36" color="black"></ux-icon>
</template>
</ux-tabbar>
</ux-card>
<!-- #endif -->
<ux-placeholder :height="200">
<ux-row justify="center" align="center" style="height: 100%;">
<ux-text prefix-icon="soapbubble-filled" text="真的没有了~"></ux-text>
</ux-row>
</ux-placeholder>
</ux-scroll>
<!-- <ux-tabbar type="special" anim="scroll" :data="tabs" :corner="20" :border="false" background="#f9f9f9" @center="onCenter">
<template v-slot:center>
<ux-icon type="plus" :size="36" color="black"></ux-icon>
</template>
</ux-tabbar> -->
<ux-tabbar type="default" anim="water" :data="tabs" :show-blur="true" :border="false" background="#f9f9f9" :z-index="100000"></ux-tabbar>
</ux-page>
</template>
<template>
<ux-page :stack="showDoc">
<ux-navbar :title="title" :border="false" :fixed="true" :show-blur="true" :z-index="100000">
<template v-slot:right>
<!-- #ifndef MP -->
<ux-button theme="text" icon="/static/tip.png" :icon-size="22" @click="onDoc()"></ux-button>
<!-- #endif -->
</template>
</ux-navbar>
<ux-scroll>
<ux-placeholder :navbar="true"></ux-placeholder>
<ux-card direction="column" icon="flag-filled" title="底部导航栏" :bold="true">
<ux-text text="支持正常形状和凹形,支持上下滚动、左右推压、水滴动画效果"></ux-text>
</ux-card>
<ux-card direction="column" icon="arrowright" title="无动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="none" :data="tabs" :corner="25" :border="false" background="#f9f9f9"></ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="上下滚动动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="scroll" :data="tabs" :border="false" background="#f9f9f9"></ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="推压动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="push" :data="tabs" background="#f9f9f9"></ux-tabbar>
</ux-card>
<!-- #ifndef MP -->
<ux-card direction="column" icon="arrowright" title="水滴动画" :bold="true">
<ux-tabbar :fixed="false" type="default" anim="water" :data="tabs" :corner="12" :border="false" background="#f9f9f9"></ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="凹形-无动画" :bold="true">
<ux-tabbar :fixed="false" type="special" anim="none" :data="tabs" :corner="12" :border="false" background="#f9f9f9" @center="onCenter">
<template v-slot:center>
<ux-icon type="plus" :size="36" color="black"></ux-icon>
</template>
</ux-tabbar>
</ux-card>
<ux-card direction="column" icon="arrowright" title="凹形-上下滚动动画" :bold="true">
<ux-tabbar :fixed="false" type="special" anim="scroll" :data="tabs" :corner="20" :border="false" background="#f9f9f9" @center="onCenter">
<template v-slot:center>
<ux-icon type="plus" :size="36" color="black"></ux-icon>
</template>
</ux-tabbar>
</ux-card>
<!-- #endif -->
<ux-placeholder :height="200">
<ux-row justify="center" align="center" style="height: 100%;">
<ux-text prefix-icon="soapbubble-filled" text="真的没有了~"></ux-text>
</ux-row>
</ux-placeholder>
</ux-scroll>
<!-- <ux-tabbar type="special" anim="scroll" :data="tabs" :corner="20" :border="false" background="#f9f9f9" @center="onCenter">
<template v-slot:center>
<ux-icon type="plus" :size="36" color="black"></ux-icon>
</template>
</ux-tabbar> -->
<ux-tabbar type="default" anim="water" :data="tabs" :show-blur="true" :border="false" background="#f9f9f9" :z-index="100000"></ux-tabbar>
</ux-page>
</template>
ts
<script setup>
import * as plus from '@/uni_modules/ux-plus'
import { UxTab } from '@/uni_modules/ux-frame'
const title = ref('')
const tabs = [
{
name: '组件',
selectedIcon: 'signature',
unselectedIcon: 'signature',
selectedColor: '#c40012',
unselectedColor: '#111111'
},{
name: 'API',
selectedIcon: 'code',
unselectedIcon: 'code',
selectedColor: '#365111',
unselectedColor: '#111111',
},
{
name: '模版',
selectedIcon: 'waves-outline',
unselectedIcon: 'waves-outline',
selectedColor: '#f1a136',
unselectedColor: '#111111',
badge: 28,
},
{
name: '切换',
selectedIcon: 'effects-filled',
unselectedIcon: '/static/logo.png',
selectedColor: '#365111',
unselectedColor: '#111111',
}
] as UxTab[]
const showDoc = ref(false)
function onDoc() {
plus.openWeb({
title: '在线文档',
url: 'https://www.uxframe.cn/component/tabbar.html',
// blur: 1,
success: () => {
showDoc.value = true
},
complete: () => {
showDoc.value = false
}
})
}
function onCenter() {
console.log('click center');
}
onLoad((e) => {
title.value = e['title'] ?? ''
})
</script>
<script setup>
import * as plus from '@/uni_modules/ux-plus'
import { UxTab } from '@/uni_modules/ux-frame'
const title = ref('')
const tabs = [
{
name: '组件',
selectedIcon: 'signature',
unselectedIcon: 'signature',
selectedColor: '#c40012',
unselectedColor: '#111111'
},{
name: 'API',
selectedIcon: 'code',
unselectedIcon: 'code',
selectedColor: '#365111',
unselectedColor: '#111111',
},
{
name: '模版',
selectedIcon: 'waves-outline',
unselectedIcon: 'waves-outline',
selectedColor: '#f1a136',
unselectedColor: '#111111',
badge: 28,
},
{
name: '切换',
selectedIcon: 'effects-filled',
unselectedIcon: '/static/logo.png',
selectedColor: '#365111',
unselectedColor: '#111111',
}
] as UxTab[]
const showDoc = ref(false)
function onDoc() {
plus.openWeb({
title: '在线文档',
url: 'https://www.uxframe.cn/component/tabbar.html',
// blur: 1,
success: () => {
showDoc.value = true
},
complete: () => {
showDoc.value = false
}
})
}
function onCenter() {
console.log('click center');
}
onLoad((e) => {
title.value = e['title'] ?? ''
})
</script>
css
<style lang="scss">
</style>
<style lang="scss">
</style>