UNPKG

xxm-test-js

Version:
153 lines (152 loc) 3.6 kB
/** * 页面水印类 * * 使用场景:为页面添加水印,用于版权保护、信息安全、防止截图泄密等场景。 * 适用于后台管理系统、敏感信息页面、文档预览等需要标识用户身份或保护内容的场合。 * * 主要特性: * - 自定义水印内容:支持单行或多行文字 * - 样式配置:可配置字体、颜色、大小、透明度、旋转角度等 * - 防删除保护:使用 MutationObserver 监听 DOM 变化,防止水印被删除或修改 * - 高性能:使用 Canvas 生成水印,以 base64 图片作为背景 * - 响应式:支持窗口大小变化时自动调整 * - 易于销毁:提供销毁方法,完全清理水印和监听器 * * @example * ```typescript * // 基本用法 * const watermark = new Watermark({ * content: '机密文档', * fontSize: 16, * opacity: 0.15 * }); * watermark.create(); * * // 多行水印 * const watermark = new Watermark({ * content: ['张三', '2024-01-01', '仅供内部使用'], * color: '#000', * rotate: -20 * }); * watermark.create(); * * // 销毁水印 * watermark.destroy(); * ``` */ interface WatermarkOptions { /** * 水印内容,支持字符串或字符串数组(多行) */ content?: string | string[]; /** * 水印容器,默认为 document.body */ container?: HTMLElement; /** * 水印宽度,默认 200 */ width?: number; /** * 水印高度,默认 150 */ height?: number; /** * 字体大小,默认 16 */ fontSize?: number; /** * 字体样式,默认 'normal' */ fontStyle?: 'normal' | 'italic' | 'oblique'; /** * 字体粗细,默认 'normal' */ fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | number; /** * 字体系列,默认 'Microsoft YaHei' */ fontFamily?: string; /** * 文字颜色,默认 '#000000' */ color?: string; /** * 透明度,默认 0.15 */ opacity?: number; /** * 旋转角度(度),默认 -20 */ rotate?: number; /** * 层级,默认 9999 */ zIndex?: number; /** * 行间距(仅多行时有效),默认 20 */ lineHeight?: number; /** * 是否启用防删除保护,默认 true */ monitor?: boolean; /** * 水印层的 id,默认 'watermark-container' */ id?: string; } declare class Watermark { private options; private watermarkElement; private observer; private resizeObserver; private isDestroyed; constructor(options?: WatermarkOptions); /** * 创建水印 */ create(): void; /** * 更新水印配置 * @param options 新的配置项 */ update(options: Partial<WatermarkOptions>): void; /** * 销毁水印 */ destroy(): void; /** * 创建水印元素 */ private createWatermarkElement; /** * 生成水印图片(base64) */ private generateWatermarkImage; /** * 移除水印元素 */ private removeWatermarkElement; /** * 启动 DOM 监听(防删除) */ private startMonitor; /** * 停止 DOM 监听 */ private stopMonitor; /** * 监听容器大小变化 */ private observeResize; /** * 停止监听容器大小变化 */ private stopResizeObserver; /** * 处理窗口大小变化(降级方案) */ private handleResize; } export { Watermark, WatermarkOptions };