Skip to content

v-watermark

为元素添加水印遮罩层。支持文字和图片水印。

起始版本: 1.3.0

用法

基本文字水印

vue
<template>
  <div v-watermark="'机密文件'" class="content">
    这是受水印保护的内容。
  </div>
</template>

带选项

vue
<template>
  <div v-watermark="{
    content: '机密文件',
    font: '16px Arial',
    color: 'rgba(0, 0, 0, 0.1)',
    rotate: -20,
    gap: [100, 100]
  }" class="document">
    受保护的内容。
  </div>
</template>

API

类型

typescript
interface WatermarkOptions {
  content: string | string[]
  width?: number
  height?: number
  rotate?: number // 默认: -22
  color?: string // 默认: 'rgba(0, 0, 0, 0.15)'
  fontSize?: number // 默认: 14
  fontFamily?: string // 默认: 'sans-serif'
  fontWeight?: string // 默认: 'normal'
  font?: string // 字体属性简写
  gap?: [number, number] // 默认: [100, 100]
  offset?: [number, number]
  image?: string
  imageWidth?: number
  imageHeight?: number
  zIndex?: number
  movable?: boolean
  deleteable?: boolean
}

选项

选项类型默认值描述
contentstring | string[]-水印文本(必填)
widthnumber300水印宽度
heightnumber200水印高度
rotatenumber-22旋转角度(度)
colorstring'rgba(0, 0, 0, 0.15)'文字颜色
fontSizenumber14字体大小
fontFamilystring'sans-serif'字体名称
gap[number, number][100, 100]水印间距
imagestring-图片水印 URL
zIndexnumber9999水印层 z-index
movablebooleanfalse水印是否随滚动移动

Composable 用法

你也可以使用 useWatermark composable:

vue
<script setup>
import { useWatermark } from 'directix'

const { dataUrl, style, disable, enable } = useWatermark({
  content: '机密文件',
  fontSize: 20,
  color: 'rgba(255, 0, 0, 0.2)'
})
</script>

<template>
  <div class="container">
    <div :style="style"></div>
    <slot></slot>
  </div>
</template>

API

typescript
interface UseWatermarkOptions {
  /** 水印文本内容 */
  content: string | string[] | Ref<string | string[]>
  /** 水印画布宽度 */
  width?: number | Ref<number>
  /** 水印画布高度 */
  height?: number | Ref<number>
  /** 旋转角度(度) */
  rotate?: number | Ref<number>
  /** 字体大小(像素) */
  fontSize?: number | Ref<number>
  /** 字体名称 */
  fontFamily?: string | Ref<string>
  /** 字体粗细 */
  fontWeight?: string | number | Ref<string | number>
  /** 字体颜色 */
  color?: string | Ref<string>
  /** 水印间距 */
  gap?: [number, number] | number | Ref<[number, number] | number>
  /** 水印层 z-index */
  zIndex?: number | Ref<number>
  /** 是否禁用水印 */
  disabled?: boolean | Ref<boolean>
}

interface UseWatermarkReturn {
  /** 水印画布元素 */
  canvas: Ref<HTMLCanvasElement | null>
  /** 水印 data URL */
  dataUrl: Ref<string>
  /** 水印 CSS 样式对象 */
  style: Ref<Record<string, any>>
  /** 是否禁用水印 */
  disabled: Ref<boolean>
  /** 更新水印选项 */
  update: (options: Partial<UseWatermarkOptions>) => void
  /** 启用水印 */
  enable: () => void
  /** 禁用水印 */
  disable: () => void
}

示例

多行水印

vue
<template>
  <div v-watermark="['公司名称', '员工:张三']" class="document">
    多行水印内容。
  </div>
</template>

图片水印

vue
<template>
  <div v-watermark="{ image: '/logo.png', imageWidth: 100 }" class="content">
    图片水印遮罩。
  </div>
</template>

基于 MIT 许可发布