v0.1.9

Watermark 水印

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

给页面区域添加不干扰内容与交互的装饰水印。参见 demo/ 中的文本、多行、图片、动态配置及 Modal 继承示例。

API

参数 说明 类型 默认值
content 水印文本;数组按行绘制,每行可覆盖字体 WatermarkContent | WatermarkContent[] —
font 字体,见下表 WatermarkFont colorFill、fontSizeLG 及正常无衬线字体
image 图片地址,优先于文本;加载失败时绘制 content string —
width / height 单个水印单元宽高 number 文本测量 / 图片 120×64
rotate 旋转角度(度) number -22
gap 间距 [x, y] [number, number] [100, 100]
offset 偏移 [left, top];绘制锚点为 offset - gap / 2 [number, number] gap / 2
zIndex 装饰层层级,支持 0 number zIndexPopupBase - 1
inherit 注册的子孙浮层继承本层水印;关闭后转交上层,无上层时不覆盖浮层 boolean true

class、style、id、aria-* 和原生事件落到根 div。样式优先级为默认 position: relative; overflow: hidden → Provider 样式 → 原生 style;支持 Vue 对象、数组、字符串样式。防篡改恢复也遵守当前合法覆盖。

字体

字段 类型 默认值
color string | CanvasGradient | CanvasPattern colorFill
fontSize number | string fontSizeLG
fontWeight 'normal' | 'lighter' | 'bold' | 'bolder' | number 'normal'
fontStyle 'normal' | 'italic' | 'oblique' 'normal'
fontFamily string 'sans-serif'
textAlign CanvasTextAlign 'center'

fontSize 的数字与纯数字字符串按像素解释;16px、2rem、12pt、calc(...) 等合法字号交给浏览器 canvas 原生解析,再用规范后的像素测量和缩放。相对单位在重绘时求值,不单独观察外部字体加载或页面字号变化。浏览器拒绝的字体在绘制时抛出 TypeError,不悄悄沿用旧字体。每行字体字段为 undefined 时继承当前有效字体。

插槽与事件

插槽 说明
default 被水印覆盖的原生内容,无作用域参数;普通配置更新保留子树身份
事件 说明 参数
remove 受管理的水印节点被移除或换父并恢复时通知,每次恢复一次;首次绘制、主动切换继承及正常卸载不触发 无

使用 <Watermark @remove="notify">;程序调用的 onRemove 是 Vue 事件监听器,支持监听器替换和 .once,不再是组件回调 prop。

Ref

WatermarkRef.nativeElement: HTMLDivElement | null 指向当前根元素。SSR 仅渲染根与默认槽,挂载后才开始 canvas、图片和观察器工作;卸载会取消帧、断开图片回调与观察器,并清除所管理的浮层水印。

Theme

本组件没有样式表或 Component Token。绘制直接读取当前 zIndexPopupBase、colorFill、fontSizeLG alias token,支持 Provider 替换与撤除。

迁移

防篡改通知改为 Vue remove 事件。fontStyle: 'none' 不是有效字体值,请改为 'normal'。图片地址变更现在会使同尺寸缓存失效,不需要附带修改宽高。

代码演示

加载中…

基本 #

最简单的用法。

加载中…

多行水印 #

通过数组设置多行水印,每一行都可以有独立的字体配置。

加载中…

图片水印 #

通过 image 指定图片地址。为保证图片高清,请设置 width 和 height(默认 120 × 64)。

加载中…

自定义配置 #

使用本库的输入框、颜色选择器、滑块和数字输入框调整水印。预览与设置面板会随容器宽度换行;偏移留空时采用默认值。

加载中…

继承到浮层 #

Watermark 的 inherit 默认开启,通过 context 把水印带到 Teleport 到 body 的 Modal 面板。

Powered by Vue 3 + ViteApollo Design · Vue NativeGitHub