当前位置: 首页 > news >正文

Vue全局添加水印

首先创建一个js文件(shuiyin.js)

// 定义水印函数
const addWatermark = ({container = document.body, // 水印添加到的容器,默认为 bodywidth = "200px", // 水印 canvas 的宽度height = "100px", // 水印 canvas 的高度textAlign = "center", // 水印文字的对齐方式textBaseline = "middle", // 水印文字的基线font = "16px Microsoft Yahei", // 水印文字的字体fillStyle = "rgba(184, 184, 184, 0.6)", // 水印文字的填充样式content = "我是水印", // 水印文字的内容rotate = -30, // 水印文字的旋转角度zIndex = 10000, // 水印的 z-index 值
}) => {// 生成水印 canvasconst canvas = document.createElement("canvas");canvas.setAttribute("width", width);canvas.setAttribute("height", height);const ctx = canvas.getContext("2d");ctx.textAlign = textAlign;ctx.textBaseline = textBaseline;ctx.font = font;ctx.fillStyle = fillStyle;ctx.rotate((Math.PI / 180) * rotate);ctx.fillText(content, parseFloat(width) / 2, parseFloat(height) / 1);// 将 canvas 转换为 base64 URLconst base64Url = canvas.toDataURL("image/png");console.log(base64Url);const __wm = document.querySelector(".__wm");const watermarkDiv = __wm || document.createElement("div");const styleStr = `position: fixed;top: 0;left: 0;bottom: 0;right: 0;width: 100%;height: 100%;z-index: ${zIndex};pointer-events: none;background: url('${base64Url}') left top repeat;`;watermarkDiv.setAttribute("style", styleStr);watermarkDiv.classList.add("__wm");// 则创建一个 div 并设置样式和类名if (!__wm) {container.style.position = "relative";container.insertBefore(watermarkDiv, container.firstChild);}// 监听容器变化,当容器发生变化时重新调用 addWatermark 函数const { MutationObserver } = window;if (MutationObserver) {let mo = new MutationObserver(function () {const __wm = document.querySelector(".__wm");// 只在__wm元素变动才重新调用__canvasWMif ((__wm && __wm.getAttribute("style") !== styleStr) || !__wm) {// 避免一直触发mo.disconnect();mo = new MutationObserver(() => {});addWatermark({container: document.getElementById("app"),width: "200px",height: "100px",textAlign: "center",textBaseline: "middle",font: "16px Microsoft Yahei",fillStyle: "rgba(184, 184, 184, 0.3 )",content,rotate: -30,zIndex: 10000,});}});mo.observe(container, {attributes: true,subtree: true,childList: true,});}
};export default addWatermark;

main.js引入

import addWatermark from "@/utils/shuiyin";
Vue.use(addWatermark);

相关文章:

  • 【SQL server】 表结构的约束和维护
  • ASP.NET 开发几个知识点
  • ubuntu 20.04+ORB_SLAM3 安装配库教程
  • QT自定义信号,信号emit,信号参数注册
  • SUID提权教程
  • van-dialog弹窗异步关闭-校验表单
  • rpmbuild 包名 version 操作系统信息部分来源 /etc/rpm/macros.dist
  • QDateEdit开发详解
  • Redis持久化策略之RDB与AOF
  • Linux本地docker一键部署traefik+内网穿透工具实现远程访问Web UI管理界面
  • java:IDEA中的Scratches and Consoles
  • C++二分查找算法:查找和最小的 K 对数字
  • C语言编程陷阱(八)
  • 记录联系ThinkPad T490扬声器无声音但插耳机有声音的解决办法
  • CSS特效014:模仿钟摆效果
  • (三)从jvm层面了解线程的启动和停止
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  •  D - 粉碎叛乱F - 其他起义
  • egg(89)--egg之redis的发布和订阅
  • HTML中设置input等文本框为不可操作
  • Java 最常见的 200+ 面试题:面试必备
  • Kibana配置logstash,报表一体化
  • Node 版本管理
  • node和express搭建代理服务器(源码)
  • PHP变量
  • python学习笔记 - ThreadLocal
  • Spring核心 Bean的高级装配
  • VUE es6技巧写法(持续更新中~~~)
  • 高程读书笔记 第六章 面向对象程序设计
  • 后端_MYSQL
  • 京东美团研发面经
  • 力扣(LeetCode)965
  • 爬虫模拟登陆 SegmentFault
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用common-codec进行md5加密
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #Z2294. 打印树的直径
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (过滤器)Filter和(监听器)listener
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十一)手动添加用户和文件的特殊权限
  • .NET CLR基本术语
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET的数据绑定
  • .NET连接数据库方式
  • .NET下的多线程编程—1-线程机制概述
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子