vue3-watermark-plugin
Version:
A powerful Vue 3 watermark plugin with component and directive support
188 lines (146 loc) • 4.55 kB
Markdown
# Vue3 Watermark Plugin
一个功能完整的 Vue 3 水印插件,支持指令和组件两种使用方式。
## 功能特性
- ✅ 支持自定义文本内容
- ✅ 支持字体大小设置
- ✅ 支持字体颜色设置
- ✅ 支持字体加粗
- ✅ 支持旋转角度设置
- ✅ 支持横向和纵向间距设置
- ✅ 防篡改保护(自动重新生成被删除的水印)
- ✅ 响应式更新
- ✅ TypeScript 支持
- ✅ 轻量级,无外部依赖
## 安装
```bash
npm install vue3-watermark-plugin
```
## 快速开始
### 1. 注册插件
```javascript
import { createApp } from "vue";
import App from "./App.vue";
import WatermarkPlugin from "vue3-watermark-plugin";
const app = createApp(App);
app.use(WatermarkPlugin);
app.mount("#app");
```
### 2. 按需引入
```javascript
import { WatermarkComponent, watermarkDirective } from "vue3-watermark-plugin";
// 注册组件
app.component("Watermark", WatermarkComponent);
// 注册指令
app.directive("watermark", watermarkDirective);
```
## 使用方式
### 指令形式(推荐)
```vue
<template>
<!-- 基础使用 -->
<div v-watermark="{ content: '机密文档' }">内容区域</div>
<!-- 完整配置 -->
<div v-watermark="watermarkConfig">内容区域</div>
</template>
<script setup>
import { reactive } from "vue";
const watermarkConfig = reactive({
content: "机密文档", // 水印文本
fontSize: 16, // 字体大小
color: "rgba(255, 0, 0, 0.2)", // 字体颜色
bold: false, // 是否加粗
rotate: -20, // 旋转角度
gapX: 120, // 横向间距
gapY: 80, // 纵向间距
});
</script>
```
### 组件形式
```vue
<template>
<Watermark
content="内部资料"
:fontSize="18"
color="rgba(0, 0, 255, 0.15)"
:bold="true"
:rotate="15"
:gapX="100"
:gapY="100"
:visible="showWatermark"
>
<div class="content">这里是需要添加水印的内容</div>
</Watermark>
</template>
<script setup>
import { ref } from "vue";
import Watermark from "@/components/Watermark/index.vue";
const showWatermark = ref(true);
</script>
```
## 配置参数
| 参数 | 类型 | 默认值 | 说明 |
| -------- | ------- | --------------------- | -------------------------------------- |
| content | String | '水印文本' | 水印显示的文本内容 |
| fontSize | Number | 16 | 字体大小(px) |
| color | String | 'rgba(0, 0, 0, 0.15)' | 字体颜色,支持任何 CSS 颜色值 |
| bold | Boolean | false | 是否加粗字体 |
| rotate | Number | -20 | 旋转角度(度),正数顺时针,负数逆时针 |
| gapX | Number | 100 | 水印之间的横向间距(px) |
| gapY | Number | 100 | 水印之间的纵向间距(px) |
| zIndex | Number | 9999 | 水印层级 |
| visible | Boolean | true | 是否显示水印(仅组件形式支持) |
## 高级用法
### 动态更新水印
```vue
<template>
<div>
<button @click="updateWatermark">更新水印</button>
<div v-watermark="config" class="content">内容区域</div>
</div>
</template>
<script setup>
import { ref } from "vue";
const config = ref({
content: "初始水印",
fontSize: 16,
color: "rgba(0, 0, 0, 0.15)",
});
const updateWatermark = () => {
config.value = {
content: "更新后的水印",
fontSize: 20,
color: "rgba(255, 0, 0, 0.3)",
};
};
</script>
```
### 条件显示水印
```vue
<template>
<div v-watermark="showWatermark ? watermarkConfig : null">内容区域</div>
</template>
<script setup>
import { ref, computed } from "vue";
const showWatermark = ref(true);
const watermarkConfig = computed(() =>
showWatermark.value
? {
content: "机密文档",
fontSize: 16,
}
: null
);
</script>
```
## 注意事项
1. **性能优化**:水印使用 Canvas 生成,大量使用时注意性能
2. **防篡改**:插件内置防篡改机制,但不能防止禁用 JavaScript
3. **样式冲突**:确保容器元素有适当的定位(relative/absolute/fixed)
4. **响应式**:水印会自动适应容器大小变化
## 浏览器兼容性
- Chrome 60+
- Firefox 55+
- Safari 12+
- Edge 79+
## 示例
查看 `demo.vue` 文件获取完整的使用示例。