Skip to content

Button 按钮

Button 组件是一个高度可定制的按钮组件,它提供了一系列的 props 用于配置按钮的样式和行为。以下是其主要功能的概述:

样式和形状

  • 类型(type):按钮可以设置为不同的类型,如主要(primary)、成功(success)、信息(info)、警告(warning)和危险(error),以便于在不同场景中使用。
  • 尺寸(size):提供四种尺寸,大(large)、中(medium)、小(small)和迷你(mini),以满足不同的布局需求。
  • 形状(shape):可以选择圆形(circle)或方形(square)按钮,以适应不同的设计风格。

特效和状态

  • 效果(effect):按钮可以设置为正常(normal)、暗色(dark)、亮色(light)或镂空(plain)效果,以展现不同的视觉风格。
  • 加载状态(loading):支持自定义加载图标和模式,可以在按钮上显示加载指示器。

图标和文本

  • 图标(prefixIcon/suffixIcon):可以在按钮前或后添加图标,支持自定义图标颜色、大小和样式。
  • 文本(text):按钮可以显示文本内容,支持自定义文本颜色、大小和样式。

行为和交互

  • 防抖和节流(debounce/throttle):提供防抖和节流功能,用于限制按钮事件的触发频率,提高性能和用户体验。
  • 阻止冒泡(stop):可以阻止按钮事件向上冒泡,避免影响其他组件。

自定义样式

  • 自定义样式(customStyle):允许传入自定义样式对象,以便于对按钮进行精细的样式调整。
  • 边框和背景:可以自定义边框的宽度、样式、颜色以及按钮的背景颜色。

状态和交互

  • 禁用状态(disabled):可以禁用按钮,使其不可点击。
  • 悬浮状态(hover):按钮可以有不同的悬浮效果,增强交互体验。
  • 圆角(radius):支持自定义圆角大小,以实现不同的视觉效果。

TButton 组件亮点

  • 灵活性:TButton 组件提供了丰富的 props,允许开发者根据需求定制按钮的几乎每一个方面,从样式到行为。
  • 易用性:组件的 API 设计简洁明了,易于理解和集成到现有的项目中。
  • 性能优化:通过防抖和节流功能,TButton 组件能够帮助开发者有效地管理事件触发,避免性能问题。
  • 响应式设计:组件支持不同的尺寸和形状,可以轻松适应不同的设备和屏幕尺寸。
  • 交互体验:悬浮状态和加载指示器等特性增强了用户的交互体验,使按钮更加生动和引人注目。

支持平台

安卓iosweb微信小程序支付宝小程序QQ小程序
xxx

示例

html
<template>
	<t-page title="按钮">
		<t-card class="mltr.30" title="Button 按钮"
			sub-title="TButton支持多种类型、尺寸、形状、特效和交互状态。支持图标、文本、自定义样式和状态控制,以及性能优化的防抖和节流功能。它适用于不同的场景和设计风格,提供灵活性和易用性,是构建交互式界面的理想选择。">
		</t-card>
		<introduction title="基础功能" v-if="area==1">
			<t-button class="mb.30">默认按钮</t-button>
			<t-button class="mb.30" type="primary">主要按钮</t-button>
			<t-button class="mb.30" type="success">成功按钮</t-button>
			<t-button class="mb.30" type="info">信息按钮</t-button>
			<t-button class="mb.30" type="warning">警告按钮</t-button>
			<t-button class="mb.30" type="error">危险按钮</t-button>
		</introduction>
		<introduction title="尺寸" v-if="area==2">
			<t-button class="mb.30" size="mini" type="warning">警告按钮(迷你)</t-button>
			<t-button class="mb.30" size="small" type="error">危险按钮(小)</t-button>
			<t-button class="mb.30" size="medium" type="success">成功按钮(正常)</t-button>
			<t-button class="mb.30" size="large" type="primary">主要按钮(大)</t-button>
		</introduction>
		<introduction title="定制" v-if="area==3">
			<t-button class="mb.30-twhr.80" suffix-class="s.45" suf-view-class='ml.0' :iconHolder="false"
				suffix-icon="server-fill" type="primary"></t-button>
			<t-button class="mb.30-twhr.80" suffix-class="s.45" suf-view-class='ml.0' suffix-icon="checkbox-mark"
				:iconHolder="false" type="success"></t-button>
			<t-button class="mb.30-twhr.80" suffix-class="s.45" suf-view-class='ml.0' suffix-icon="star"
				:iconHolder="false" type="warning"></t-button>
			<t-button class="mb.30-twhr.80" suffix-class="s.45" suf-view-class='ml.0' suffix-icon="trash"
				:iconHolder="false" type="error"></t-button>
		</introduction>

		<introduction title="镂空" v-if="area==4">
			<t-button class="mb.30" effect="plain">默认按钮</t-button>
			<t-button class="mb.30" effect="plain" type="primary">主要按钮</t-button>
			<t-button class="mb.30" effect="plain" type="success">成功按钮</t-button>
			<t-button class="mb.30" effect="plain" type="info">信息按钮</t-button>
			<t-button class="mb.30" effect="plain" type="warning">警告按钮</t-button>
			<t-button class="mb.30" effect="plain" type="error">危险按钮</t-button>

		</introduction>
		<introduction title="镂空+禁用边框" v-if="area==5">
			<t-button class="mb.30" effect="plain" :border="false">默认按钮</t-button>
			<t-button class="mb.30" effect="plain" :border="false" type="primary">主要按钮</t-button>
			<t-button class="mb.30" effect="plain" :border="false" type="success">成功按钮</t-button>
			<t-button class="mb.30" effect="plain" :border="false" type="info">信息按钮</t-button>
			<t-button class="mb.30" effect="plain" :border="false" type="warning">警告按钮</t-button>
			<t-button class="mb.30" effect="plain" :border="false" type="error">危险按钮</t-button>
		</introduction>
		<introduction title="浅色背景" v-if="area==6">
			<t-button class="mb.30" effect="light">默认按钮</t-button>
			<t-button class="mb.30" effect="light" type="primary">主要按钮</t-button>
			<t-button class="mb.30" effect="light" type="success">成功按钮</t-button>
			<t-button class="mb.30" effect="light" type="info">信息按钮</t-button>
			<t-button class="mb.30" effect="light" type="warning">警告按钮</t-button>
			<t-button class="mb.30" effect="light" type="error">危险按钮</t-button>
		</introduction>
		<introduction title="基础功能(带图标)1" v-if="area==7">
			<t-col class="fc">
				<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map">默认</t-button>
				<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" suffixIconolor="#fff"
					type="success">成功按钮</t-button>
				<t-button class=" mb.30" suffixIcon="plus-circle" prefixIcon="map" type="error">危险按钮</t-button>
				<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" type="primary">主要按钮</t-button>
				<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" type="warning">警告按钮</t-button>
			</t-col>
		</introduction>
		<introduction title="loading(draw动画-默认动画类型)" v-if="area==8">
			<t-button class="mb.30" type="e" loadingIcon="spinner" :loading="loading" :iconHolder="true"
				loadingClass="s.60">加载中</t-button>
			<t-button class="mb.30" loadingIcon="circular" type="success" :loading="loading"
				:iconHolder="true">加载中</t-button>
			<t-button @click="loading=!loading">{{loading?'关闭loading':'开启loading'}}</t-button>
		</introduction>
		<introduction title="loading(css动画)" v-if="area==9">
			<t-button class="mb.30" loadingIcon="setting" loadingMode="icon" loadingClass="s.60" :iconHolder="true"
				:loading="loading">加载中</t-button>
			<t-button class="mb.30" loadingIcon="setting" loadingMode="icon" type="success" :loading="loading"
				:iconHolder="true">加载中</t-button>
			<t-button class="mb.30" loadingIcon="setting" loadingMode="icon" type="error" :loading="loading"
				:iconHolder="true">加载中</t-button>
			<t-button class="mb.30" loadingIcon="setting" loadingMode="icon" type="primary" :loading="loading"
				:iconHolder="true">加载中</t-button>
			<t-button class="mb.30" loadingIcon="setting" loadingMode="icon" type="warning" :loading="loading"
				:iconHolder="true">加载中</t-button>
			<t-button @click="loading=!loading">{{loading?'关闭loading':'开启loading'}}</t-button>
		</introduction>
		<introduction title="镂空按钮(带图标)" v-if="area==10">
			<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map">默认按钮</t-button>
			<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" type="success">成功按钮</t-button>
			<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" type="error">危险按钮</t-button>
			<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" type="primary">主要按钮</t-button>
			<t-button class="mb.30" suffixIcon="plus-circle" prefixIcon="map" type="warning">警告按钮</t-button>
		</introduction>
		<introduction title="基础功能(带图标)" v-if="area==11">
			<t-button class="mb.30" prefixIcon="plus-circle">默认</t-button>
			<t-button class="mb.30" prefixIcon="plus-circle" prefixIconColor="#fff" type="success">成功按钮</t-button>
			<t-button class="mb.30" prefixIcon="plus-circle" type="error">危险按钮</t-button>
			<t-button class="mb.30" prefixIcon="plus-circle" type="primary">主要按钮</t-button>
			<t-button class="mb.30" prefixIcon="plus-circle" type="warning">警告按钮</t-button>
			<t-button class="mb.30" prefixIcon="plus-circle" type="error" prefixIconColor="blue"
				color="blue">颜色覆盖</t-button>
			<t-button class="mb.30-bg.#0AB99C" prefixIcon="plus-circle" type="error">背景覆盖</t-button>
			<t-button class="mb.30" prefixIcon="plus-circle" type="error" :border="false">去掉边框</t-button>

		</introduction>
		<introduction title="禁用按钮带背景" v-if="area==12">
			<t-button class="mb.30" :disabled="true">默认按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="success">成功按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="error">危险按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="primary">主要按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="warning">警告按钮</t-button>
		</introduction>
		<introduction title="镂空按钮禁用" v-if="area==13">
			<t-button class="mb.30" :disabled="true" type="info">默认按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="success">成功按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="error">危险按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="primary">主要按钮</t-button>
			<t-button class="mb.30" :disabled="true" type="warning">警告按钮</t-button>
		</introduction>
		<introduction title="覆盖固定样式" v-if="area==14">
			<t-button class="mb.30-bg.#0AB99C" text-class="c.#fff" type="info">覆盖背景</t-button>
			<t-button class="mb.30-bg.#0AB99C" text-class="c.#ccc" type="info" :border="false">镂空覆盖测试</t-button>
		</introduction>
		<introduction title="禁用Hover" v-if="area==15">
			<t-button class="mb.30" :hover="false" type="error">无点击效果</t-button>
		</introduction>

		<introduction title="设置宽高" v-if="area==16">
			<t-button class="mb.30-h.120" type="error">自定义宽高</t-button>
		</introduction>

		<introduction title="圆形按钮" v-if="area==17">
			<t-button class="mb.30-r.200" type="primary">圆角</t-button>
			<t-button class="mb.30-r.200" type="error">圆角</t-button>
		</introduction>
		<introduction title="图标" v-if="area==18">
			<t-button class="mb.30-w.250" width="250rpx" prefixIcon="photo" prefix-class="s.40"
				type="error">图标</t-button>
		</introduction>
		<introduction title="防抖" v-if="area==19">
			<t-button class="mb.30" @click="test" :tdTime="1000" :debounce="true"
				type="error">防抖(在1000ms内,只有最后一次操作)</t-button>
			<t-button class="mb.30" @click="test" :tdTime="1000" :throttle="true"
				type="s">节流(在1000ms内,只能触发一次)</t-button>
		</introduction>
		<introduction title="节流" v-if="area==20">
			<t-button class="mb.30" @click="test" :tdTime="1000" :debounce="true"
				type="error">防抖(在1000ms内,只有最后一次操作)</t-button>
			<t-button class="mb.30" @click="test" :tdTime="1000" :throttle="true"
				type="s">节流(在1000ms内,只能触发一次)</t-button>
		</introduction>
		<t-row class='ffww-tdb-tdr-tdp-mltr.30'>
			<t-button type="p" class="mrb.30" size="small" @click="area=1">基础功能</t-button>
			<t-button type="e" class="mrb.30" size="small" @click="area=2">尺寸</t-button>
			<t-button type="s" class="mrb.30" size="small" @click="area=3">定制</t-button>
			<t-button type="w" class="mrb.30" size="small" @click="area=4">镂空</t-button>
			<t-button type="p" class="mrbs.30" size="small" @click="area=5">镂空+禁用边框</t-button>
			<t-button type="p" class="mrb.30" size="small" @click="area=6">浅色背景</t-button>
			<t-button type="e" class="mrb.30" size="small" @click="area=7">基础功能(带图标)</t-button>
			<t-button type="s" class="mrb.30" size="small" @click="area=8">loading(draw动画-默认动画类型)</t-button>
			<t-button type="w" class="mrb.30" size="small" @click="area=9">loading(css动画)</t-button>
			<t-button type="p" class="mrbs.30" size="small" @click="area=10">镂空按钮(带图标)</t-button>
			<t-button type="p" class="mrb.30" size="small" @click="area=11">基础功能(带图标)</t-button>
			<t-button type="e" class="mrb.30" size="small" @click="area=12">禁用按钮带背景</t-button>
			<t-button type="s" class="mrb.30" size="small" @click="area=13">镂空按钮禁用</t-button>
			<t-button type="w" class="mrb.30" size="small" @click="area=14">覆盖固定样式</t-button>
			<t-button type="p" class="mrbs.30" size="small" @click="area=15">禁用Hover</t-button>
			<t-button type="p" class="mrb.30" size="small" @click="area=16">设置宽高</t-button>
			<t-button type="e" class="mrb.30" size="small" @click="area=17">圆形按钮</t-button>
			<t-button type="s" class="mrb.30" size="small" @click="area=18">图标</t-button>
			<t-button type="w" class="mrb.30" size="small" @click="area=19">防抖</t-button>
			<t-button type="w" class="mrb.30" size="small" @click="area=20">节流</t-button>
		</t-row>
	</t-page>
</template>

<script setup>
	const area = ref(1)
	const loading = ref(true)
	function test() {
		console.log('防抖节流测试')
	}
</script>

Props

名称描述类型默认值可选值
textClass按钮文本的额外类名String''-
prefixIcon前置图标的名称String''-
prefixClass前置图标的额外类名String''-
suffixIcon后置图标的名称String''-
suffixClass后置图标的额外类名String''-
loadingMode加载模式String'draw'draw,icon
loading是否显示加载中状态Booleanfalsetrue, false
loadingIcon加载图标的名称String'spinner'loadingMode=draw模式仅支持spinner,circular,loadingMode=icon 支持所有图标
loadingClass加载图标的额外类名String''-
prefixViewClass前置图标盒子的类名String''-
sufViewClass后置图标盒子的类名String''-
debounce是否开启防抖Booleanfalsetrue, false
throttle是否开启节流Booleanfalsetrue, false
tdTime防抖或节流时间,单位为毫秒Number500-
border是否显示边框Booleantruetrue, false
hover是否有鼠标悬停效果Booleantruetrue, false
iconHolder是否显示图标占位符Booleantruetrue, false
path跳转页面的路径String''-

Events

事件名描述回调参数版本
click点击按钮时触发--

Slots

名称描述
default默认插槽,用于放置按钮文本内容