Skip to content

Watermark 水印

给页面的某个区域加上水印,支持文字和图片水印,具有防篡改功能。

基础用法

最简单的用法。

这是一个带有水印的内容区域

水印会自动重复填充整个区域

vue
<template>
  <c-watermark content="CUI水印">
    <div class="content-box">
      <p>这是一个带有水印的内容区域</p>
      <p>水印会自动重复填充整个区域</p>
    </div>
  </c-watermark>
</template>

多行文字

通过设置 content 为数组来实现多行文字水印。

这是多行文字水印的示例

可以显示多行文字内容

vue
<template>
  <c-watermark :content="['CUI组件库', '版权所有']">
    <div class="content-box">
      <p>这是多行文字水印的示例</p>
      <p>可以显示多行文字内容</p>
    </div>
  </c-watermark>
</template>

透明度对比

通过调整 alpha 属性来控制水印的透明度。

透明度: 0.1

水印几乎不可见

透明度: 0.8

水印清晰可见

vue
<template>
  <!-- 低透明度 -->
  <c-watermark content="低透明度" :alpha="0.1">
    <div class="content-box">
      <p>透明度: 0.1</p>
    </div>
  </c-watermark>
  
  <!-- 高透明度 -->
  <c-watermark content="高透明度" :alpha="0.8">
    <div class="content-box">
      <p>透明度: 0.8</p>
    </div>
  </c-watermark>
</template>

旋转角度

通过 rotate 属性设置水印的旋转角度。

旋转角度: 0°

水平显示

旋转角度: -45°

倾斜显示

vue
<template>
  <!-- 水平水印 -->
  <c-watermark content="水平水印" :rotate="0">
    <div class="content-box">
      <p>旋转角度: 0°</p>
    </div>
  </c-watermark>
  
  <!-- 倾斜水印 -->
  <c-watermark content="倾斜水印" :rotate="-45">
    <div class="content-box">
      <p>旋转角度: -45°</p>
    </div>
  </c-watermark>
</template>

图片水印

通过设置 image 属性来使用图片作为水印。

这是图片水印的示例

可以使用任何图片作为水印

vue
<template>
  <c-watermark 
    image="https://via.placeholder.com/120x64/409eff/ffffff?text=LOGO" 
    :width="120" 
    :height="64"
  >
    <div class="content-box">
      <p>这是图片水印的示例</p>
      <p>可以使用任何图片作为水印</p>
    </div>
  </c-watermark>
</template>

自定义配置

通过设置各种属性来自定义水印的样式。

机密文档

这是一个带有自定义样式水印的内容区域

水印角度为45度,颜色为红色,透明度较低

间距也进行了调整

vue
<template>
  <c-watermark 
    content="CONFIDENTIAL" 
    :rotate="45" 
    :alpha="0.1" 
    font-color="red" 
    :font-size="20"
    :gap="[150, 150]"
  >
    <div class="content-box large">
      <h3>机密文档</h3>
      <p>这是一个带有自定义样式水印的内容区域</p>
      <p>水印角度为45度,颜色为红色,透明度较低</p>
      <p>间距也进行了调整</p>
    </div>
  </c-watermark>
</template>

间距设置

通过 gap 属性调整水印之间的间距。

间距: [80, 80]

水印较密集

间距: [200, 200]

水印较稀疏

vue
<template>
  <!-- 密集水印 -->
  <c-watermark content="密集水印" :gap="[80, 80]">
    <div class="content-box">
      <p>间距: [80, 80]</p>
    </div>
  </c-watermark>
  
  <!-- 稀疏水印 -->
  <c-watermark content="稀疏水印" :gap="[200, 200]">
    <div class="content-box">
      <p>间距: [200, 200]</p>
    </div>
  </c-watermark>
</template>

字体样式

自定义水印的字体大小、颜色和样式。

字体大小: 24px

颜色: 蓝色,加粗

字体大小: 18px

颜色: 绿色,斜体

vue
<template>
  <!-- 大字体水印 -->
  <c-watermark 
    content="大字体水印" 
    :font-size="24" 
    font-color="#409eff" 
    font-weight="bold"
  >
    <div class="content-box">
      <p>字体大小: 24px</p>
    </div>
  </c-watermark>
  
  <!-- 斜体水印 -->
  <c-watermark 
    content="斜体水印" 
    :font-size="18" 
    font-color="#67c23a" 
    font-style="italic"
  >
    <div class="content-box">
      <p>字体大小: 18px</p>
    </div>
  </c-watermark>
</template>

防篡改

水印组件具有防篡改功能,当水印被删除或修改时会自动恢复并触发 change 事件。

尝试通过开发者工具删除或修改水印元素

水印会自动恢复并触发change事件

vue
<template>
  <c-watermark content="防篡改水印" @change="handleWatermarkChange">
    <div class="content-box">
      <p>尝试通过开发者工具删除或修改水印元素</p>
      <p>水印会自动恢复并触发change事件</p>
    </div>
  </c-watermark>
</template>

<script setup>
const handleWatermarkChange = (event) => {
  console.log('水印被篡改:', event)
  // 可以在这里添加相应的处理逻辑
}
</script>

禁用状态

通过 disabled 属性可以禁用水印显示。

disabled: false

水印正常显示

disabled: true

水印被禁用

vue
<template>
  <!-- 正常状态 -->
  <c-watermark content="正常水印" :disabled="false">
    <div class="content-box">
      <p>水印正常显示</p>
    </div>
  </c-watermark>
  
  <!-- 禁用状态 -->
  <c-watermark content="禁用水印" :disabled="true">
    <div class="content-box">
      <p>水印被禁用</p>
    </div>
  </c-watermark>
</template>

实际应用场景

以下是一些常见的水印应用场景示例。

文档保护

重要文档标题

这是一份重要的机密文档内容。文档包含敏感信息,需要添加水印以防止未授权传播。

水印会覆盖整个文档区域,起到版权保护和防泄露的作用。

即使文档被截图或打印,水印信息也会一同显示,便于追溯来源。

用户身份标识

系统管理界面

当前登录用户: admin@example.com

水印显示当前用户身份,便于操作审计和责任追溯。

vue
<template>
  <!-- 文档保护 -->
  <c-watermark 
    :content="['机密文档', '请勿外传']" 
    :rotate="45" 
    :alpha="0.15" 
    font-color="#ff4757" 
    :font-size="16"
    :gap="[120, 120]"
  >
    <div class="document-content">
      <h3>重要文档标题</h3>
      <p>文档内容...</p>
    </div>
  </c-watermark>
  
  <!-- 用户身份标识 -->
  <c-watermark 
    content="用户: admin@example.com" 
    :rotate="-15" 
    :alpha="0.1" 
    font-color="#2f3542" 
    :font-size="14"
    :gap="[180, 100]"
  >
    <div class="admin-panel">
      <h3>系统管理界面</h3>
      <p>管理内容...</p>
    </div>
  </c-watermark>
</template>

API

Watermark Attributes

参数说明类型可选值默认值
content水印文字内容,支持单行或多行文字string / string[]''
image水印图片地址,设置后将显示图片水印string''
width水印区域宽度(像素)number120
height水印区域高度(像素)number64
rotate水印旋转角度(度数),正数顺时针,负数逆时针number-22
z-index水印元素的层级number9
alpha水印透明度,0为完全透明,1为完全不透明number0-10.5
font-size文字水印的字体大小(像素)number16
font-color文字水印的字体颜色string'rgba(0,0,0,.15)'
font-style文字水印的字体样式stringnormal / italic / oblique'normal'
font-weight文字水印的字体粗细string / numbernormal / bold / 100-900'normal'
font-family文字水印的字体系列string'sans-serif'
gap水印之间的间距 [水平间距, 垂直间距][number, number][100, 100]
offset水印的偏移量 [水平偏移, 垂直偏移][number, number][0, 0]
disabled是否禁用水印显示booleanfalse

Watermark Events

事件名说明回调参数
change水印被篡改时触发(如删除、修改水印元素)(event: Event)

Watermark Slots

插槽名说明
default需要添加水印的内容区域

注意事项

  1. 优先级:当同时设置 contentimage 时,image 优先级更高
  2. 性能:水印使用 Canvas 生成,大量水印可能影响性能
  3. 防篡改:组件使用 MutationObserver 监控 DOM 变化,自动恢复被删除的水印
  4. 响应式:水印会根据容器大小自动调整显示区域
  5. 兼容性:需要浏览器支持 Canvas API 和 MutationObserver API