Watermark 水印
容器级水印层,铺在内容之上且不拦截任何交互,适合敏感信息防泄露。
渲染引擎:文字/灰阶图片水印由 canvas 绘制平铺单元(toDataURL 作背景平铺),尺寸按 devicePixelRatio 放大,高分屏不模糊;SSR 与无 canvas 环境自动回退 SVG data-uri(fill=currentColor 跟随主题),两路径渲染结构一致,真水合校验后接管。tile 按绘制参数缓存,仅相关属性或主题色变化才重绘;窗口 resize 由背景平铺天然适配。
文字水印
基础文字水印
text 生成斜纹平铺单元;repeat 存在时平铺,缺省时单枚居中。
单枚与透明度
单枚居中 + 透明度
opacity 控制水印层透明度(0–1,自动夹取边界)。
图片水印
图片水印
图片灰阶
grayscale:图片灰阶滤镜
grayscale 存在时图片水印经 canvas filter: grayscale(1) 转为灰度(跨域图片需目标站放行 CORS,否则回退原图);无 canvas 环境回退为图层 CSS filter,能力不丢。
不拦截交互
内容正常交互
水印层 `pointer-events: none`,上方的按钮/输入等交互完全不受影响。
空容器
无内容也显示水印
容器没有任何 slot 内容时,水印层照常渲染。
多行、旋转与字体
多行文字 / 旋转 / 字体族
text 支持 JSON 数组(或 \n)多行;rotate 控制旋转角(默认 -30);width / height 调单枚画布尺寸(缺省按文字内容自适应:旋转外接框 + 内边距,保证默认密度下每个平铺单元完整容纳文字);font-size / font-weight / font-family 进 canvas 文字;color 支持 11 个预设色名(走 --oas-preset-* token,暗色自动适配)或任意 CSS 色值,缺省跟随主题文字色(暗色下同样可见,主题切换自动重绘)。
间隙与偏移
gap / offset 平铺参数
gap="[x,y]" 控制平铺单元间距(默认取 tile 尺寸),offset="[x,y]" 控制起始偏移(默认 gap/2);width / height 可改文字 tile 尺寸,z-index 可抬升水印层(默认 2)。
错位排布
staggered 奇偶行错位
staggered 存在时双层背景错位半 tile,奇偶行错开排布(仅平铺模式生效)。
防篡改
tamper-proof:删不掉的水印
尚未检测到篡改
tamper-proof 默认开启(="false" 关闭):MutationObserver 监听水印层被移除或样式被改写,自动重挂/恢复并派发 oas-remove 事件(detail.type 为 removed / modified)。防君子不防小人——它兜底「随手删除」,不是安全边界。
可拖拽水印
movable:按住水印拖动
movable 存在时水印层接管指针(grab/grabbing 光标),拖拽把位移写入 offset 属性——受控通道更新,组件重绘后位置仍保留。注意:此时水印层会拦截其覆盖区域的交互。
全屏水印
fullscreen:铺满视口的全屏水印
点击按钮开启全屏水印:宿主变为 fixed 铺满视口,页面滚动水印不动,不拦截任何交互;再次点击关闭。
fullscreen 存在时组件自身 position: fixed; inset: 0 铺满视口(pointer-events: none),无需宿主包裹;默认最高层级,可用 z-index 属性或 --oas-watermark-fullscreen-z-index CSS 变量调整。与 repeat / staggered / movable / grayscale 均可组合;不设 fullscreen 时容器模式行为零变化。注意:全屏模式下 slot 内容不参与布局交互。
API
oas-watermark
属性
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
color | 水印文字色:11 预设名(--oas-preset-*)或任意 CSS 色值;缺省走文本主色 token | string | — |
font-family | 字体族(默认 sans-serif) | string | sans-serif |
font-size | 字号(px,默认 16) | string | 16 |
font-weight | 字重(默认 400) | string | 400 |
fullscreen | 全屏水印:宿主 fixed inset:0 铺满视口(pointer-events:none),默认最高层级(z-index 属性或 --oas-watermark-fullscreen-z-index 可调),页面滚动不动 | boolean | — |
gap | 平铺间隙 JSON [x,y](默认 tile 尺寸) | string | — |
grayscale | 图片水印灰阶滤镜(canvas filter: grayscale(1));无 canvas 环境回退图层 CSS filter | boolean | — |
height | 文字 tile 高(未设置时按内容自适应;图片水印缺省 120) | string | — |
image | 图片水印 URL(存在时优先于 text) | string | — |
movable | 可拖拽移动水印(位移写回 offset 属性,受控保留) | boolean | — |
offset | 平铺起始偏移(px 或 JSON [x,y];默认 gap/2,与旧居中视觉等价) | string | — |
opacity | 水印层透明度(0–1,自动夹取) | string | 0.15 |
repeat | 布尔,存在时平铺;缺省单枚居中 | boolean | — |
rotate | 旋转角度(度,默认 -30) | string | -30 |
staggered | 错位排布(双层背景,第二层偏移 offset + gap/2;仅平铺模式) | boolean | — |
tamper-proof | 防篡改(默认 true):MutationObserver 监测图层被删/被改自动重挂并派发 oas-remove;"false" 关闭 | string | true |
text | 文字水印内容(与 image 二选一) | string | — |
width | 文字 tile 宽(未设置时按内容自适应:旋转外接框 + 内边距;图片水印缺省 240) | string | — |
z-index | 水印层叠层级(默认 2);fullscreen 时写到宿主,覆盖默认最高层 | string | — |
事件
| 事件 | 说明 |
|---|---|
oas-remove | 防篡改监测到图层被移除/篡改时派发,detail: { type: "removed" | "modified" } |
插槽
| 名称 | 说明 |
|---|---|
| 默认 | 被水印覆盖的内容 |
CSS 变量
| CSS 变量 | 默认值 |
|---|---|
--oas-watermark-fullscreen-z-index | 2147483647 |
水印为装饰层(aria-hidden + pointer-events: none),不参与可访问性树,不拦截交互。