组件/Button 按钮

Button 按钮

触发操作的按钮,含分割、图标与复制按钮

已验证自 0.3.4

安装

EXAMPLE.BASH
pnpm add @talex-touch/tuffex
EXAMPLE.TYPESCRIPT
import { TxButton, TxSplitButton, TxIconButton, TxCopyButton } from '@talex-touch/tuffex/button'
import '@talex-touch/tuffex/button/style.css'
import '@talex-touch/tuffex/base.css' // 设计令牌与重置样式,全应用引入一次

用法

变体

示例加载中...

禁用

示例加载中...

加载中

loading 期间按钮禁用;纯图标按钮的加载指示叠在图标上。

示例加载中...

尺寸

size 有 sm、md、lg 三档,高度为 26、32、38px。

示例加载中...

块级

block 撑满容器宽度;搭配 loadingVariant="bar" 时加载显示为扫光层。

示例加载中...

形态

非块级 circle 的边长等于按钮高度;flat 变体的 sm 为 32px。

示例加载中...

触感反馈

vibrate 需显式开启:点击时触发设备震动,并按强度轻晃按钮;不支持震动的设备也会晃动。

示例加载中...

分割按钮

TxSplitButton 把主操作与 menu 插槽中的更多操作组合在一起。

示例加载中...

主次搭配

主操作用 primary,次操作用 ghost。

示例加载中...

图标按钮

label 提供可访问名称,pressed 表示持久切换态,status 设置语义色。

示例加载中...

复制按钮

成功后显示 copiedLabel,失败时派发 error。

示例加载中...

最佳实践

  • 每个视图或卡片只放一个主按钮,次要动作用 ghost 或 secondary。
  • 异步动作设置 loading,成功与失败路径都要撤下,避免按钮卡在禁用态。
  • 只在表单内使用 nativeType="submit";默认的 button 不会意外提交表单。
  • 纯图标动作用 TxIconButton 并设置 label;pressed 只用于持久开关。
  • TxCopyButton 的 copyLabel 写明复制对象;复制值关键时处理 error,浏览器可能拒绝非用户手势的写入。

API 参考

TxButton

属性

ParameterTypeDefaultDescription
variant
primary
secondary
ghost
danger
success
warning
info
flat
bare
'secondary'

视觉风格。

type
primary
success
warning
danger
info
text
-

语义别名,仅在未设置 variant 时生效;text 映射为 ghost。

size
sm
md
lg
'md'

高度 26 / 32 / 38px;旧值 large、small、mini 在运行时归一。

block
boolean
false

撑满父容器宽度。

plain
boolean
false

朴素样式。

dashed
boolean
false

虚线边框。

round
boolean
false

圆角形态。

circle
boolean
false

圆形,用于纯图标按钮。

loading
boolean
false

显示加载指示并禁止点击。

loading-variant
spinner
bar
'spinner'

加载样式;bar 仅在 block 时渲染为扫光层。

disabled
boolean
false

禁用按钮并阻止 click。

border
boolean
true

为 false 时去掉边框色。

icon
string
-

显示在文案前的图标类名。

autofocus
boolean
false

挂载后自动聚焦。

native-type
button
submit
reset
'button'

原生 type 属性。

vibrate
boolean
false

点击时触发设备震动与对应的按钮晃动。

vibrate-type
light
medium
heavy
bit
success
warning
error
'light'

震动强度。

Parameter
variant
Type
primary
secondary
ghost
danger
success
warning
info
flat
bare
Default
'secondary'
Description

视觉风格。

Parameter
type
Type
primary
success
warning
danger
info
text
Default
-
Description

语义别名,仅在未设置 variant 时生效;text 映射为 ghost。

Parameter
size
Type
sm
md
lg
Default
'md'
Description

高度 26 / 32 / 38px;旧值 large、small、mini 在运行时归一。

Parameter
block
Type
boolean
Default
false
Description

撑满父容器宽度。

Parameter
plain
Type
boolean
Default
false
Description

朴素样式。

Parameter
dashed
Type
boolean
Default
false
Description

虚线边框。

Parameter
round
Type
boolean
Default
false
Description

圆角形态。

Parameter
circle
Type
boolean
Default
false
Description

圆形,用于纯图标按钮。

Parameter
loading
Type
boolean
Default
false
Description

显示加载指示并禁止点击。

Parameter
loading-variant
Type
spinner
bar
Default
'spinner'
Description

加载样式;bar 仅在 block 时渲染为扫光层。

Parameter
disabled
Type
boolean
Default
false
Description

禁用按钮并阻止 click。

Parameter
border
Type
boolean
Default
true
Description

为 false 时去掉边框色。

Parameter
icon
Type
string
Default
-
Description

显示在文案前的图标类名。

Parameter
autofocus
Type
boolean
Default
false
Description

挂载后自动聚焦。

Parameter
native-type
Type
button
submit
reset
Default
'button'
Description

原生 type 属性。

Parameter
vibrate
Type
boolean
Default
false
Description

点击时触发设备震动与对应的按钮晃动。

Parameter
vibrate-type
Type
light
medium
heavy
bit
success
warning
error
Default
'light'
Description

震动强度。

事件

ParameterTypeDefaultDescription
click
(event: MouseEvent) => void
-

未禁用且未加载时点击触发。

Parameter
click
Type
(event: MouseEvent) => void
Default
-
Description

未禁用且未加载时点击触发。

插槽

插槽名说明
default文案或自定义内容,渲染在图标与加载指示之后。

TxSplitButton

属性

属性名类型默认值说明
variant'primary' | 'secondary' | 'ghost' | 'danger' | 'success' | 'warning' | 'info'primary主按钮与菜单按钮共用的变体。
size'sm' | 'md' | 'lg'md高度 28 / 32 / 40px。
disabledbooleanfalse同时禁用主操作与菜单触发器。
loadingbooleanfalse主按钮显示加载指示,两侧均禁用。
iconstring-非加载时显示在文案前的图标类名。
menuIconstringi-ri-more-2-line菜单触发器的默认图标类名。
menuDisabledbooleanfalse仅禁用菜单触发器。
menuWidthnumber200弹层宽度,透传给 TxPopover。
menuPlacement'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'right-start' | 'right-end' | 'left-start' | 'left-end'bottom-end弹层位置。
menuOffsetnumber8弹层偏移(px)。

事件

事件名参数说明
click(event: MouseEvent)主按钮在未禁用、未加载时点击触发。
menuOpenChange(open: boolean)菜单打开状态变化时触发。

插槽

插槽名参数说明
default-主操作文案。
menu{ close: () => void }弹层中的菜单内容;选择后调用 close()。
menu-icon-替换菜单触发器的图标。

TxIconButton

属性

属性名类型默认值说明
iconstring''无默认插槽时经 TxIcon 渲染的图标名。
labelstring''可访问名称;纯图标时必填,缺失时开发环境告警。
size'xs' | 'sm' | 'md' | 'lg''md'按钮尺寸。
shape'square' | 'circle' | 'pill''square'点击区域轮廓。
status'success' | 'warning' | 'danger' | 'info'-语义色,作用于图标、悬停、按下与焦点;不改变行为或权限。
pressedboolean-持久切换态,定义时输出 aria-pressed。
disabledbooleanfalse原生禁用。
nativeType'button' | 'submit' | 'reset''button'原生 type 属性。

事件

事件名参数说明
click(event: MouseEvent)未禁用时点击触发。

插槽

插槽名Props说明
default{ hover, pressed }自定义图标或动画内容。

TxCopyButton

属性

属性名类型默认值说明
textstring''写入剪贴板的文本。
copyLabelstring'Copy'空闲时的文案与 aria-label。
copiedLabelstring'Copied'复制成功后的文案与 aria-label。
disabledbooleanfalse禁用并阻止复制。
timeoutnumber1400成功状态恢复前的毫秒数。
size'sm' | 'md''sm'按钮尺寸。

事件

事件名参数说明
copy(text: string)写入剪贴板成功后触发。
error(error: unknown)写入失败时触发。

插槽

插槽名Props说明
default{ copied, copying }自定义按钮内容。

类型

EXAMPLE.TS
import type { TxButtonEmits, TxButtonProps, TxIconButtonProps, TxSplitButtonEmits, TxSplitButtonProps } from '@talex-touch/tuffex'

export interface ButtonProps extends TxButtonProps {}
export interface ButtonEmits extends TxButtonEmits {}
export interface SplitButtonProps extends TxSplitButtonProps {}
export interface SplitButtonEmits extends TxSplitButtonEmits {}
export interface IconButtonProps extends TxIconButtonProps {}

概述

  • variant 优先于 type;两者都未设置时为 secondary。
  • disabled 与 loading 都禁用原生 <button> 并阻止 click;TxSplitButton 加载时两侧都禁用。
  • 非块级、非圆形按钮在 loading 切换时以 FLIP 过渡宽度;block 与 circle 并用时保持常规文案布局。
  • 纯图标的 TxButton 用 aria-label 等 attrs 命名;TxIconButton 把 label 写入 aria-label,布尔 pressed 写入 aria-pressed。
  • TxCopyButton 优先用 Clipboard API,不可用时回退到 execCommand;禁用或写入中忽略点击。
  • 减少动态效果时跳过 vibrate 的晃动。

技术实现

  • --tx-button-height 同时决定按钮高度与非块级圆形按钮的宽度。
  • 源码:packages/tuffex/packages/components/src/button/。

使用场景

  • 页面与卡片动作、表单提交(nativeType="submit")、抽屉底部操作(block)。
  • 表格行与工具栏(size="sm")、纯图标操作(circle 或 TxIconButton)。
  • 带一组变体的主操作(TxSplitButton)、复制到剪贴板(TxCopyButton)。
View source
packages/tuffex/packages/components/src/button/index.ts