Button

使用具有按压反馈的操作表面,并可选磁吸、状态和金属质感变体。

适用场景

  • 用于表单提交、确认等明确操作;跳转到其他页面时使用链接。

安装

选择安装方式,用法示例将同步更新导入路径。

$ bunx --bun shadcn-vue@2.8.2 add https://orvui.efu.me/r/button.json https://orvui.efu.me/r/button-metallic.json https://orvui.efu.me/r/button-base.json https://orvui.efu.me/r/button-stateful.json https://orvui.efu.me/r/button-magnetic.json

首次使用时,将安装的 src/components/orvui/styles.css 导入项目样式入口。

示例

金属质感

metallic.vue

在中性操作表面的金属边缘移动一道直线反光。

基础

base.vue

比较不同尺寸与外观,并查看悬停抬升和按压收缩反馈。

状态按钮

stateful.vue

在空闲、加载、成功与失败之间切换,宽度跟随当前内容调整。

磁吸

magnetic.vue

用 Magnetic 包装操作控件,让其表面跟随附近的指针移动。

状态与事件

此示例组合没有声明成对的受控属性与 update 事件。使用已列出的属性、原生事件和插槽组合内容;不要为它添加未公开的 v-model。

API 参考

金属质感

MetallicButton

size?
"sm" | "md" | "lg" | "icon"
"md"
paused?
boolean
false
disabled?
boolean
false

插槽

default
() => VNodeChild
#default

Button

variant?
"primary" | "secondary" | "ghost" | "outline"
"primary"
size?
"sm" | "md" | "lg" | "icon"
"md"
pressScale?
number
0.93
ripple?
boolean
false
disabled?
boolean
false
type?
"button" | "submit" | "reset"
"button"

插槽

default
() => VNodeChild
#default

基础

variant?
"primary" | "secondary" | "ghost" | "outline"
"primary"
size?
"sm" | "md" | "lg" | "icon"
"md"
pressScale?
number
0.93
ripple?
boolean
false
disabled?
boolean
false
type?
"button" | "submit" | "reset"
"button"

插槽

default
() => VNodeChild
#default

状态按钮

StatefulButton

state?
"success" | "idle" | "loading" | "error"
"idle"
loadingText?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
"Loading"
successText?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
"Done"
errorText?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
"Try again"
icon?
boolean | null | string | number | void | VNode<RendererNode, RendererElement, { [key: string]: any; }> | VNodeArrayChildren | ComponentOptions<any, any, any, ComputedOptions, MethodOptions, any, any, any, string, {}, {}, string, {}, {}, {}, string, ComponentProvideOptions> | FunctionalComponent<any, {}, any, {}> | ComponentPublicInstanceConstructor<any, any, any, any, ComputedOptions, MethodOptions>
—
variant?
"primary" | "secondary" | "ghost" | "outline"
—
size?
"sm" | "md" | "lg" | "icon"
—
pressScale?
number
—
ripple?
boolean
false
disabled?
boolean
false
type?
"button" | "submit" | "reset"
—

插槽

icon
() => VNodeChild
#icon

Button

variant?
"primary" | "secondary" | "ghost" | "outline"
"primary"
size?
"sm" | "md" | "lg" | "icon"
"md"
pressScale?
number
0.93
ripple?
boolean
false
disabled?
boolean
false
type?
"button" | "submit" | "reset"
"button"

插槽

default
() => VNodeChild
#default

磁吸

MagneticButton

strength?
number
0.25
disabled?
boolean
false
magneticClassName?
string
—

插槽

default
() => VNodeChild
#default

Button

variant?
"primary" | "secondary" | "ghost" | "outline"
"primary"
size?
"sm" | "md" | "lg" | "icon"
"md"
pressScale?
number
0.93
ripple?
boolean
false
disabled?
boolean
false
type?
"button" | "submit" | "reset"
"button"

插槽

default
() => VNodeChild
#default

无障碍

为交互控件提供明确的无障碍名称。保留文档中的键盘路径、可见焦点与减少动态效果状态;自定义插槽应继续保留所替代部件的语义。

常见问题

如何配置 Button?
通过 variant、size、pressScale、ripple、disabled、type 配置 Button;API 表列出其类型与默认值。
如何连接到应用状态?
通过default 插槽提供内容,应用副作用由调用方管理。
可以在服务端渲染吗?
可以在 Vue SSR 应用中正常渲染。服务端与客户端的初始 props 应保持一致;浏览器测量与交互资源在挂载后启动。

更新于