v0.1.9

BorderBeam 边框流光

引入import { DEFAULT_BORDER_BEAM_DURATION } from '@apollo-design/ui';

沿 HTML 容器边框流动的装饰性描边。

API

参数 说明 类型 默认值
prefixCls Effect 的完整类名及运行时 CSS 变量前缀 string Provider 前缀 + -border-beam
color 纯色或色标数组(0–100 映射到 0–70%,保留尾部淡出) string | { color: string; percent: number }[] 主题主色渐变
count 有限且 ≥1 时向下取整,其余回落 1 number 1
duration 单圈秒数,有限且 >0 才生效,其余回落 6 number 6
lineWidth 流光厚度,数字补 px number | string 主题 lineWidth
outset 覆盖四边统一 inset;未传时分别跟随宿主边框宽度 number | string —
size 流光头部长度,数字补 px number | string 100px
classNames.effect 每个装饰 Effect div 的类名 { effect?: string } —
styles.effect 每个装饰 Effect div 的内联样式 { effect?: CSSProperties } —

插槽与原生 attrs

默认插槽接受 VNodeChild。单一 HTML 根元素可以被装饰,包括组件条件渲染或异步解析后的单根。注释、空白以及单根 Fragment 保留宿主;文本、SVG 和多个有效根完整透传,不绘制流光,也不添加布局容器。

原生 class、style、data-*、aria-* 和事件按 Vue 规则合并到选中的宿主 VNode。同名样式由宿主自身优先;组件宿主仍遵守该组件的 attrs 传递规则。原有 key、模板 ref、ref 数组、具名插槽和生命周期钩子由原调用方保有。要访问宿主元素或组件,请在子节点上放模板 ref;BorderBeam 不提供公开方法、事件或 v-model。

宿主自行提供定位上下文,通常设置 position: relative。Effect 继承圆角、不接收指针事件,并标记 aria-hidden。Effect 样式依次合并运行时变量、Provider style、Provider styles.effect、组件 styles.effect,后者优先。Provider 的 className 和 classNames.effect 仍是 Effect 配置。

可见宿主的边框宽度使用同一个 500ms 共享时钟采样,并读取实际所属文档。隐藏文档不读样式,恢复可见后立即补采样。没有 HTML 宿主即无采样订阅;更换宿主、迁移文档和卸载会清理相关资源。SSR 只保留内容,不创建 Effect 或定时器。减少动态效果偏好下隐藏流光。

迁移

已删除组件的 className 和原先落在 Effect 的 style Props。宿主使用原生 class/style,装饰层使用 classNames.effect/styles.effect。Vue 更新宿主文本而移除装饰节点时,会重建装饰层,保留宿主身份与焦点。

代码演示

加载中…

基础用法 #

包裹任意内容,展示沿边框流动的流光。

加载中…

鼠标悬浮时显示 #

通过状态控制流光的显示与隐藏。鼠标悬浮或键盘聚焦都可预览;装饰层透明度变化时保留同一宿主,避免切换 DOM 引起闪动。

Hover or focus the same host to preview the effect without remounting its content.

加载中…

多条流光 #

count 大于 1 时展示多条错相流动的流光。

加载中…

自定义容器 #

流光跟随宿主的圆角与边框(border-radius: inherit)。原生 class/style 修饰宿主,styles.effect 只修饰装饰层。

加载中…

渐变色 #

color 传色标数组(0–100 会线性映射到 0–70% 保留尾部淡出)。

加载中…

动画时长 #

duration 控制单圈时长(秒)。

加载中…

尺寸 #

size 控制流光头部长度。

加载中…

线宽 #

lineWidth 控制流光描边厚度(默认随宿主 border 宽度)。

Powered by Vue 3 + ViteApollo Design · Vue NativeGitHub