更新记录
1.0.1(2025-11-21)
修复编译问题
1.0.0(2025-11-21)
✨ 新增功能
平台兼容性
uni-app(3.6.14)
| Vue2 | Vue2插件版本 | Vue3 | Vue2插件版本 | Chrome | Chrome插件版本 | Safari | Safari插件版本 | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.1 | √ | 1.0.1 | √ | 1.0.1 | √ | 1.0.1 | √ | 1.0.1 | √ | 1.0.1 | 5.1 | 1.0.1 | 12 | 1.0.1 | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - |
uni-app x(3.6.14)
| Chrome | Chrome插件版本 | Safari | Safari插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.1 | √ | 1.0.1 | 5.1 | 1.0.1 | 12 | 1.0.1 | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | √ | √ |
hy-smart-watermark
可动态配置的全端防截屏智能水印插件
✨ 特性
- 🎨 文本/图片水印 - 支持文本和图片两种水印类型
- 🔒 安全防护 - 采用原生 Canvas 渲染,不易被 DOM 操作移除
- 🎭 动态浮动 - 支持静态和动态浮动两种模式,动态水印实时位移,增加抠图难度
- 🔐 伪随机加密 - 可选密钥生成伪随机偏移序列,增加防篡改难度
- 📱 全端兼容 - H5 / App (Android/iOS) / 小程序全平台支持
- 📏 自动适配 - Android 端自动处理 dp/px 单位转换,确保多端显示大小一致
- ⚡ 高性能 - 原生渲染,流畅不卡顿
- 🎯 零权限 - 无需任何系统权限
- 🛠️ 易集成 - 简单配置,开箱即用
🚀 快速开始
API 方式调用(APP 端推荐)
<template>
<view>
<button @click="addWatermark">添加水印</button>
<button @click="removeWatermark">移除水印</button>
</view>
</template>
<script>
import { createWatermark, destroyWatermark } from '@/uni_modules/hy-smart-watermark'
export default {
data() {
return {
watermarkId: ''
}
},
methods: {
addWatermark() {
createWatermark({
content: '保密文档 - 禁止截屏',
type: 'text',
mode: 'dynamic',
fontSize: 16, // 逻辑像素 (dp/pt)
fontColor: '#000000',
opacity: 0.15,
rotate: -20,
gapX: 200, // 逻辑像素 (dp/pt)
gapY: 150, // 逻辑像素 (dp/pt)
floatRange: 5, // 逻辑像素 (dp/pt)
secret: 'my-secret-key',
success: (res) => {
this.watermarkId = res.watermarkId
console.log('水印创建成功', res)
},
fail: (err) => {
console.error('水印创建失败', err)
}
})
},
removeWatermark() {
if (this.watermarkId) {
destroyWatermark({
watermarkId: this.watermarkId,
success: (res) => {
console.log('水印销毁成功', res)
}
})
}
}
}
}
</script>
组件方式调用(H5/小程序推荐)
<template>
<view>
<hy-watermark
content="保密文档 - 禁止截屏"
:visible="showWatermark"
mode="dynamic"
:fontSize="16"
:opacity="0.15"
:rotate="-20"
:gapX="200"
:gapY="150"
:floatRange="5"
secret="my-secret-key"
/>
<button @click="showWatermark = !showWatermark">
{{ showWatermark ? '隐藏水印' : '显示水印' }}
</button>
</view>
</template>
<script>
import HyWatermark from '@/uni_modules/hy-smart-watermark/components/hy-watermark/hy-watermark.vue'
export default {
components: {
HyWatermark
},
data() {
return {
showWatermark: true
}
}
}
</script>
📖 API 文档
createWatermark(options)
创建水印实例。
参数说明 (WatermarkOptions)
💡 单位说明:所有数值类型的参数(fontSize, gapX, gapY, floatRange 等)均使用逻辑像素 (dp/pt)。插件内部会自动处理 Android 端的 dp 转 px,确保在不同像素密度的设备上显示大小一致。
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| content | String | 是 | - | 水印内容(文本内容或图片URL) |
| type | String | 否 | 'text' | 水印类型:'text' | 'image' |
| mode | String | 否 | 'static' | 水印模式:'static' (静态) | 'dynamic' (动态浮动) |
| position | String | 否 | 'fixed' | 位置模式:'fixed' (固定) | 'absolute' (绝对) |
| fontSize | Number | 否 | 16 | 字体大小 (dp/pt) |
| fontColor | String | 否 | '#000000' | 字体颜色 (Hex) |
| fontFamily | String | 否 | 'sans-serif' | 字体族 |
| rotate | Number | 否 | -20 | 旋转角度 (-180 ~ 180) |
| opacity | Number | 否 | 0.15 | 透明度 (0 ~ 1) |
| gapX | Number | 否 | 200 | 水平间距 (dp/pt) |
| gapY | Number | 否 | 150 | 垂直间距 (dp/pt) |
| width | Number | 否 | 120 | 图片水印宽度 (dp/pt) |
| height | Number | 否 | 60 | 图片水印高度 (dp/pt) |
| offscreenRendering | Boolean | 否 | true | 是否启用离屏渲染 (Android端建议关闭以提高稳定性) |
| floatRange | Number | 否 | 5 | 动态浮动最大偏移量 (dp/pt) |
| floatDuration | Number | 否 | 3000 | 动态浮动动画周期 (毫秒) |
| secret | String | 否 | '' | 伪随机密钥 (用于生成不可预测的随机偏移) |
| zIndex | Number | 否 | 9999 | z-index 层级 |
| monitorScroll | Boolean | 否 | true | 是否监听页面滚动 |
| success | Function | 否 | - | 成功回调 |
| fail | Function | 否 | - | 失败回调 |
| complete | Function | 否 | - | 完成回调 |
返回值(success 回调)
{
watermarkId: string, // 水印实例ID
success: boolean, // 是否成功
message: string // 消息
}
destroyWatermark(options)
销毁水印实例。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| watermarkId | String | 否 | 水印实例ID,不传则销毁所有 |
| success | Function | 否 | 成功回调 |
| fail | Function | 否 | 失败回调 |
| complete | Function | 否 | 完成回调 |
updateWatermark(params)
更新已存在的水印实例配置。
参数说明 (UpdateParams)
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| watermarkId | String | 是 | 目标水印实例ID |
| options | Object | 是 | 新的水印配置 (WatermarkOptions),支持增量更新 |
| success | Function | 否 | 成功回调 |
| fail | Function | 否 | 失败回调 |
| complete | Function | 否 | 完成回调 |
🎯 使用场景
- 📄 企业文档 - OA系统、文档管理、合同查看
- 🎓 在线教育 - 课件展示、考试系统、培训平台
- 📊 数据报表 - 敏感数据展示、BI系统
- 💼 商业应用 - CRM、ERP等企业级应用
- 🏥 医疗系统 - 病历查看、检查报告
- 🏦 金融应用 - 账户信息、交易记录
⚠️ 注意事项
- 前端水印非绝对安全:前端水印主要起到提醒和威慑作用,无法完全阻止截屏(如系统级截屏),如需绝对安全请配合后端措施(如DRM)。
- 性能考虑:动态浮动模式 (
mode: 'dynamic') 会持续触发重绘,虽然已做性能优化,但在低端设备上仍建议谨慎使用或减少水印数量(增大gapX/gapY)。 - 单位适配:插件已内置单位转换,开发时请统一使用逻辑像素 (dp/pt),无需手动计算物理像素。
- 层级遮挡:默认
zIndex为 9999,如果被其他组件遮挡,请适当调大该值。
🔧 进阶配置
自定义动态浮动
createWatermark({
content: '机密文件',
mode: 'dynamic',
floatRange: 10, // 增大浮动范围 (dp)
floatDuration: 2000, // 加快动画速度 (2秒一圈)
secret: 'random-seed' // 使用密钥生成固定的随机轨迹
})
图片水印
createWatermark({
type: 'image',
content: '/static/logo.png', // 支持本地路径或网络URL
width: 100,
height: 50,
opacity: 0.2
})
高密度水印
createWatermark({
content: 'CONFIDENTIAL',
gapX: 100, // 减小间距
gapY: 80,
fontSize: 12,
opacity: 0.1
})

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 45
赞赏 0
下载 11284907
赞赏 1810
赞赏
京公网安备:11010802035340号