vue使用自定义指令实现水印

devtools/2025/1/16 20:43:23/

水印指令

  • 封装自定义水印指令
  • 在main.js中全局注册指令
  • 项目中使用指令

封装自定义水印指令

在项目中创建一个watermark.js文件,封自定义自定的方法,这个文件不需要修改可以直接复制粘贴使用,当然可以根据自己的水印样式需求,去修改文件中的属性设置;

javascript">
// 生成包含水印文本的图片方法
function generateWatermark(text, fontSize, color) {const canvas = document.createElement('canvas'); // 创建canvas元素canvas.width = 300; // 设置canvas宽度canvas.height = 160; // 设置canvas高度const ctx = canvas.getContext('2d'); // 获取2D绘图上下文ctx.font = `${fontSize}px Arial`; // 设置字体大小和字体样式ctx.fillStyle = color; // 设置字体颜色ctx.translate(20, canvas.height - 20); // 平移坐标原点ctx.rotate(-Math.PI / 6); // 旋转角度const watermarkText = text;ctx.fillText(watermarkText, 0, 0); // 绘制文本return canvas.toDataURL('image/png'); // 将canvas内容转换为base64格式的图片
}
//应用水印到指定元素
// el:要添加水印的元素、color:字体颜色、text:水印文本、fontSize:字体大小
function applyWatermark(el, text, fontSize, color) {const watermarkUrl = generateWatermark(text, fontSize, color);const watermarkLayer = document.createElement('div');watermarkLayer.style.cssText = `  position: absolute;  top: 0; left: 0;z-index:100;width:100%;  height: 100%;  background-image: url(${watermarkUrl});  background-repeat: repeat;  pointer-events: none;  `;el.style.position = 'relative'; // 应用样式el.appendChild(watermarkLayer); // 将水印层添加到元素中
}export default {bind(el, binding, vnode) {const defaultText = '默认水印'; // 默认水印文本const defaultFontSize = 16; // 默认字体大小const defaultColor = 'rgba(0, 0, 0, 0.2)'; // 默认字体颜色applyWatermark(el, defaultText, defaultFontSize, defaultColor);},unbind(el) {el.removeChild(el.lastChild);}
}

在main.js中全局注册指令

javascript">//引入封装的文件
import watermarkFile from './components/v1/watermark.js'
//全局注册指定
Vue.directive('watermark', watermarkFile)

项目中使用指令

可以在自己需要添加水印的html标签上直接添加v-watermark指令;

javascript"><div v-watermark>展示内容区域</div>

完成,这样你就可以里看到你想要的水印啦;


http://www.ppmy.cn/devtools/151050.html

相关文章

java进行pdf文件压缩

文章目录 pdf文件压缩 pdf文件压缩 添加依赖 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-pdf</artifactId><version>23.1</version> </dependency>public class OptimizePdf {public static void opti…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

鸿蒙面试 2025-01-11

ArkTs 和TS的关系&#xff1f; ArkTS&#xff08;方舟开发语言&#xff09;与 TypeScript&#xff08;TS&#xff09;存在紧密联系&#xff0c;同时也有显著区别&#xff1a; 联系 语法基础&#xff1a;ArkTS 在语法层面大量借鉴了 TypeScript &#xff0c;TypeScript 里诸如…

为深度学习创建PyTorch张量 - 最佳选项

为深度学习创建PyTorch张量 - 最佳选项 正如我们所看到的&#xff0c;PyTorch张量是torch.Tensor​ PyTorch类的实例。张量的抽象概念与PyTorch张量之间的区别在于&#xff0c;PyTorch张量为我们提供了一个可以在代码中操作的具体实现。 在上一篇文章中&#xff0c;我们看到了…

【Elasticsearch】filterQuery过滤查询

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

C语言:数据的存储

本文重点&#xff1a; 1. 数据类型详细介绍 2. 整形在内存中的存储&#xff1a;原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 数据类型结构的介绍&#xff1a; 类型的基本归类&#xff1a; 整型家族 浮点家族 构造类型&#xff1a; 指针类型&…

在 CentOS/Red Hat Linux 中安装 Docker

在 Red Hat Linux 中安装 Docker 在 Red Hat Linux (RHEL) 中安装 Docker 需要一些准备工作&#xff0c;尤其是针对不同版本的系统&#xff08;如 RHEL 7、8、9&#xff09;。以下是具体的安装步骤&#xff1a; 步骤 1&#xff1a;检查系统版本 在安装前&#xff0c;确认系统…

【可持久化线段树】 [SDOI2009] HH的项链 主席树(两种解法)

文章目录 1.题目描述2.思路3.解法一解法一代码 4.解法二解法二代码&#xff08;版本一&#xff09;解法二代码&#xff08;版本二&#xff09; 1.题目描述 原题&#xff1a;https://www.luogu.com.cn/problem/P1972 [SDOI2009] HH的项链 题目描述 HH 有一串由各种漂亮的贝壳…