Skip to content
本页导读

Tabbar

组件类型:UxTabbarComponentPublicInstance

支持正常形状和凹形,支持上下滚动、左右推压、水滴动画效果

平台兼容性

UniApp X

AndroidiOSweb鸿蒙 Next小程序
x

UniApp Vue Nvue

AndroidiOSweb鸿蒙 Next小程序
xxxx

Props

属性名类型默认值说明
centerSlot中间凸起按钮插槽
typeStringdefault类型
animStringnone动效类型
indexNumber0默认选择下标
dataUxTab[]tab列表(导入:import{UxTab}from'@/uni_modules/ux-frame/libs/types/types.uts')
selectedColorString$ux.Conf.fontColor选中颜色
unselectedColorString$ux.Conf.fontColor未选中颜色
selectedColorDarkString深色none-不显示,auto-自动适配深色模式,其他-颜色
unselectedColorDarkString深色none-不显示,auto-自动适配深色模式,其他-颜色
iconSizeAny18图标大小单位px
fontSizeAny12字体大小单位px
fontBoldBooleanfalse字体加粗
customFontString网络字体路径或自定义字体路径
customFamilyString自定义字体family
borderBooleanfalse显示上边框
borderColorString$ux.Conf.borderColor上边框颜色
cornerAny0圆角
backgroundString#FFFFFF背景色
backgroundDarkString深色none-不显示,auto-自动适配深色模式,其他-颜色
centerColorString#FFFFFF中间按钮背景色
showBlurBooleanfalse开启模糊背景仅支持normal类型
blurRadiusNumber10模糊半径
blurAlphaNumber0.5模糊透明度
zIndexNumber10000层级z-index
hoverBooleantrue显示点击态
fixedBooleantrue固定位置

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>