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

vue 页面加水印

首先创建一个waterMark.js文件,当然文件命名可自定义,

'use strict'const watermark = {}/**** @param {要设置的水印的内容} str* @param {需要设置水印的容器} container*/
const setWatermark = (str, container) => {const id = '1.23452384164.123412415'if (container === undefined) {return}// 查看页面上有没有,如果有则删除if (document.getElementById(id) !== null) {const childelement = document.getElementById(id)childelement.parentNode.removeChild(childelement)}var containerWidth = container.offsetWidth // 获取父容器宽var containerHeight = container.offsetHeight // 获取父容器高container.style.position = 'relative' // 设置布局为相对布局// 创建canvas元素(先制作一块背景图)const can = document.createElement('canvas')can.width = 200 // 设置每一块的宽度can.height = 200 // 高度can.size= 20const cans = can.getContext('2d') // 获取canvas画布cans.rotate(-20 * Math.PI / 180) // 逆时针旋转π/9  cans.font = '20px Vedana' // 设置字体cans.fillStyle = 'rgba(0, 0, 0, 0.20)' // 设置字体的颜色cans.textAlign = 'left' // 文本对齐方式cans.textBaseline = 'Middle' // 文本基线cans.fillText(str, 0, 4 * can.height / 5) // 绘制文字// 创建一个div元素const div = document.createElement('div')div.id = id // 设置iddiv.style.pointerEvents = 'none' // 取消所有事件div.style.top = '0px'div.style.left = '0px'div.style.position = 'absolute'div.style.zIndex = '100000'div.style.width = containerWidth + 'px'div.style.height = containerHeight + 'px'div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat'container.appendChild(div) // 追加到页面return id
}// 该方法只允许调用一次
watermark.set = (str, container) => {let id = setWatermark(str, container)setInterval(() => {if (document.getElementById(id) === null) {id = setWatermark(str, container)}}, 500)// 监听页面大小的变化window.onresize = () => {setWatermark(str, container)}
}export default watermark
<div ref="fristhome">vue 页面</div>

在需要的加水印的页面导入watermark.js文件

import  waterMark from "../../utils/waterMark"
// 这是笔者的文件路径,具体的根据个人所放的路径即可,

方法中调用

waterMark.set('水印', this.$refs.fristhome)

效果:
在这里插入图片描述

相关文章:

vue 页面加水印

首先创建一个waterMark.js文件&#xff0c;当然文件命名可自定义&#xff0c; use strictconst watermark {}/**** param {要设置的水印的内容} str* param {需要设置水印的容器} container*/ const setWatermark (str, container) > {const id 1.23452384164.123412415…...

Android ImageView详解

scaleType属性详解 在 Android 中&#xff0c;ImageView 控件的 scaleType 属性用于指定图像在 ImageView 内部的缩放和对齐方式。scaleType 属性可以帮助你控制图像的显示方式&#xff0c;以适应 ImageView 的尺寸或实现其他特定的显示效果。以下是常见的 scaleType 属性值和…...

ElasticSearch第二讲:ES详解 - ElasticSearch基础概念

ElasticSearch第二讲&#xff1a;ES详解 - ElasticSearch基础概念 在学习ElasticSearch之前&#xff0c;先简单了解下ES流行度&#xff0c;使用背景&#xff0c;以及相关概念等。本文是ElasticSearch第二讲&#xff0c;ElasticSearch的基础概念。 文章目录 ElasticSearch第二讲…...

Ajax模拟视频点赞功能

前台 <%--Created by IntelliJ IDEA.User: xxDate: 2023/9/4Time: 10:00To change this template use File | Settings | File Templates. --%> <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head>&l…...

java解决 衣服尺码 Compare T-Shirt Sizes

java解决衣服尺码 时间限制&#xff1a;3000MS 内存限制&#xff1a;589824KB 题目描述&#xff1a; 一般来说衣服尺码分为L&#xff0c;M&#xff0c;S三种&#xff0c;分别代表大(Large)&#xff0c;中(Medium)和小(Small)。不过由于人的身高差异性较大&#xff0c;尺码又会…...

基于python+Django深度学习的音乐推荐方法研究系统设计与实现

摘 要 数字化时代带动着整个社会的信息化发展&#xff0c;随着数字媒体的不断发展&#xff0c;现在通多媒体数字产品的内容越来越丰富&#xff0c;传播影响力越来越强&#xff0c;以音乐为例&#xff0c;现在的音乐文化多样、音乐资源也异常的丰富&#xff0c;在这种大数据的环…...

【枚举区间+线段树】CF Ehu 152 E

Problem - E - Codeforces 题意&#xff1a; 思路&#xff1a; 感觉是个套路题 对区间计数&#xff0c;按照CF惯用套路&#xff0c;枚举其中一个端点&#xff0c;对另一个端点计数 对于这道题&#xff0c;枚举右端点&#xff0c;对左端点计数 Code&#xff1a; #include &…...

宏定义天坑记录

宏定义天坑记录 事件原委与推理过程 在编译一个使用了Protobuf的项目时出现了如下报错 [ybVM-8-7-centos boost_searcher]$ make g -o http_server http_server.cc data/raw_html.pb.cc -stdc11 -lboost_system -lboost_filesystem -lpthread -ljsoncpp -lprotobuf In file…...

Git的一些常用概念与操作方法分享

Git是一个版本控制系统&#xff0c;它可以记录代码的变化历史并允许多个开发者同时对同一代码库进行开发。以下是Git的基本概念和使用方式&#xff1a; 仓库&#xff08;Repository&#xff09;- 保存代码的地方。Git仓库包含了所有的版本历史记录、代码以及其他相关文件。 分…...

webpack实战:某网站JS逆向分析

文章目录 1. 写在前面2. 抓包分析3. 扣加密代码 1. 写在前面 好的逆向能够帮助我们了解加密实现&#xff0c;然后根据加密方式&#xff08;md5,base64,res,des,rsa…)还原加密算法的过程。可以看看我之前的这篇文章&#xff1a;快速定位查找加密方式特征与技巧 目标站点&#…...

826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标

826. 安排工作以达到最大收益 核心思想&#xff1a;排序维护最大利润。首先我们需要对工人按照能力排序&#xff0c;前面工人满足的最大利润后面的工人肯定是满足的&#xff0c;所以我们只需要用一个tmp来维护小于等于当前工人的最大利润&#xff0c;然后如何得到tmp&#xff…...

JAVA毕业设计097—基于Java+Springboot+Vue+uniapp的医院挂号小程序系统(源码+数据库)

基于JavaSpringbootVueuniapp的医院挂号小程序系统(源码数据库)097 一、系统介绍 本系统前后端分离(网页端和小程序端都有) 本系统分为管理员、医院、用户三种角色(角色菜单可自行分配) 用户功能&#xff1a; 注册、登录、医院搜索、最新资讯、医生搜索、挂号预约、挂号记…...

4.3.3.1 【MySQL】CHAR(M)列的存储格式

我们知道 Compact 行格式在 CHAR(M) 类型的列中存储数据的时候还挺麻烦&#xff0c;分变长字符集和定长字符集的情况&#xff0c;而在 Redundant 行格式中十分干脆&#xff0c;不管该列使用的字符集是啥&#xff0c;只要是使用 CHAR(M) 类型&#xff0c;占用的真实数据空间就是…...

js 处理数组合并vs对象合并

前言: 前端开发中&#xff0c;我们会遇到各种数据的需求&#xff0c;但是后端给你返回的数据结构又不是你想要的&#xff0c; 只能自己动手&#xff0c;去组装数据&#xff0c;重新定义数据结构了。 1. js 数组合并的方法 常用的应该是 concat 方法. 示例: let arr1 […...

Webpack vs Vite的核心差异

构建速度: Webpack: Webpack的构建速度相对较慢&#xff0c;尤其在大型项目中&#xff0c;因为它需要分析整个依赖图&#xff0c;进行多次文件扫描和转译。Vite: Vite以开发模式下的极速构建著称。它利用ES模块的特性&#xff0c;只构建正在编辑的文件&#xff0c;而不是整个项…...

53、springboot对websocket的支持有两种方式-------1、基于注解开发 WebSocket ,简洁实现多人聊天界面

基于注解开发 WebSocket –注解就是&#xff1a; OnOpen、 OnClose 、 OnMessage 、OnError这些 ★ WebSocket的两种开发方式 ▲ Spring Boot为WebSocket提供了两种开发方式&#xff1a; 基于spring-boot-starter-websocket.jar开发WebSocket 基于Spring WebFlux开发WebSoc…...

18 Linux之Python定制篇-Python开发平台Ubuntu

18 Linux之Python定制篇-Python开发平台Ubuntu 文章目录 18 Linux之Python定制篇-Python开发平台Ubuntu18.1 安装Ubuntu虚拟机18.4 Ubuntu的root用户18.5 Ubuntu下开发Python 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&…...

AMEYA360:士兰微推出600A/1200V IGBT汽车驱动模块,提升充电速度与行驶动力

随着人们对环保意识的提高和汽车驾驶体验感的不断追求&#xff0c;新能源汽车的市场需求逐渐增大&#xff0c;已然成为汽车发展的大趋势&#xff0c;但是新能源汽车充电时间长、续航里程短等问题仍然是汽车厂商和车主们的痛点。因此&#xff0c;需要更好的汽车驱动产品来实现“…...

【Linux】Epoll Reactor【反应堆】模式的工作流程

Reactor模式的工作流程 主线程往epoll内核事件表中注册socket上的就绪事件。主线程调用epoll_wait等待socket上有数据可读。当socket上有数据可读时&#xff0c;epoll_wait通知主线程。主线程将socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒&#xff0c;…...

Php“梦寻”淘宝天猫商品详情数据接口,淘宝商品详情数据API接口,淘宝API接口申请指南(含代码示例)

淘宝商品详情接口 API 是开放平台提供的一种 API 接口&#xff0c;它可以帮助开发者获取淘宝商品的详细信息&#xff0c;包括商品的标题、描述、图片等信息。在淘宝电商平台的开发中&#xff0c;淘宝详情接口 API 是非常常用的 API&#xff0c;因此本文将详细介绍淘宝详情接口 …...

华为云API调用实战:如何用Python脚本自动获取并刷新IAM用户Token?

华为云API自动化鉴权实战&#xff1a;Python实现Token动态管理与高可用方案 在云原生应用开发中&#xff0c;服务间API调用已成为现代系统架构的基石。华为云作为国内领先的云服务提供商&#xff0c;其API网关的鉴权机制直接关系到业务系统的稳定性和安全性。对于中高级开发者而…...

急救场景下的志愿者调度与AED就近匹配

急救场景下的志愿者调度与AED就近匹配——120急救通的设计思路 一、问题的起点&#xff1a;黄金4分钟 心脏骤停后&#xff0c;每延迟1分钟&#xff0c;存活率下降7%-10%。医学上公认的黄金抢救时间是4分钟。 而现实是&#xff1a;城市中120救护车平均到达时间超过10分钟&#x…...

全息三维空间孪生,全域无感精准智位:数字孪生·视频孪生·无感定位 行业地位核心优势

在全域空间数字化、实景虚实融合与空间智能快速演进的产业周期中&#xff0c;镜像视界&#xff08;浙江&#xff09;科技有限公司持续深耕视频原生三维重构、时空AI像素解算、全域无感精准定位、跨镜轨迹智能推演底层核心领域&#xff0c;依托八大自主可控核心引擎构筑全栈技术…...

【c++面向对象编程】第37篇:面向对象设计原则(一):单一职责与开闭原则

目录 一、为什么需要设计原则&#xff1f; 二、单一职责原则&#xff08;Single Responsibility Principle&#xff09; 违反原则的例子 重构&#xff1a;分离职责 三、开闭原则&#xff08;Open-Closed Principle&#xff09; 违反原则的例子 重构&#xff1a;使用多态&…...

辽宁传媒学院学生宿舍与生活服务情况梳理

校园住宿条件是了解高校生活服务的重要方面。本文对辽宁传媒学院学生宿舍房型、设施配置、日常服务和新生入住流程进行梳理&#xff0c;供读者了解校园生活环境时参考。由于宿舍分配、设施配置和报到流程可能随年份调整&#xff0c;具体安排应以学校当年发布的通知为准。一、宿…...

给企业主机穿上安全防护“黄金甲”,打造金城汤池

主机安全主要的风险来源——漏洞众所周知&#xff0c;软件是构成数字世界的基础&#xff0c;但是软件都是人为编写的&#xff0c;与一切皆可编程相对应的是&#xff0c;一切软件都存在漏洞。平均每千行代码就有4-6个安全缺陷&#xff0c;漏洞是网络安全的命门。但是&#xff0c…...

Node.js框架深度解析:从Express到Nest.js,如何选择最适合你的Web开发框架?

1. 项目概述&#xff1a;为什么Node.js框架值得你花时间研究&#xff1f;如果你是一名Web开发者&#xff0c;或者正在向这个方向转型&#xff0c;那么“Node.js框架”这个词组对你来说一定不陌生。但面对市面上林林总总的框架&#xff0c;从Express、Koa到Nest.js、Fastify&…...

一文读懂:文档解析、RAG、知识库及文档Agent

AI会取代人类工作吗&#xff1f;斯坦福大学教授、AI领域顶尖学者吴恩达近日明确表示&#xff1a;不会有AI就业末日。在他看来&#xff0c;AI会影响岗位、改变技能要求、替代部分任务&#xff0c;但将其描绘成大规模失业灾难&#xff0c;“是在制造不必要的恐惧&#xff0c;也是…...

DeepSeek SSO权限同步失效深度复盘(附完整日志追踪链路图)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek SSO权限同步失效深度复盘&#xff08;附完整日志追踪链路图&#xff09; 问题现象与影响范围 2024年10月17日 02:48 UTC&#xff0c;DeepSeek内部SSO系统&#xff08;基于Keycloak 22.0.5&am…...

终极跨平台KVM解决方案:3分钟掌握Input Leap键盘鼠标共享

终极跨平台KVM解决方案&#xff1a;3分钟掌握Input Leap键盘鼠标共享 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 还在为多台电脑设备间频繁切换键盘鼠标而烦恼吗&#xff1f;Input Leap跨平台KVM软…...