前端页面添加水印

前端页面添加水印

主要功能说明:

  1. 这是一个用于添加页面水印的工具函数
  2. 水印会以半透明的形式显示在页面上,并且会重复平铺
  3. 水印文字会有-15度的倾斜角度
  4. 水印会覆盖整个页面,但不会影响页面的正常交互
  5. 每次调用函数时会先删除已存在的水印,再添加新的水印
  6. 使用canvas绘制水印,然后转换为背景图片,这样可以提高性能
  7. 水印会固定显示在页面上,即使页面滚动也不会移动

watermark.js

/*** 为页面添加水印的函数* @param {string} text - 水印显示的文本内容*/
export function addWatermark(text) {// 删除已存在的水印,防止重复添加const oldWatermark = document.getElementById('watermark')if (oldWatermark) {oldWatermark.remove()}// 创建canvas元素用于绘制水印const canvas = document.createElement('canvas')// 设置canvas的宽度和高度,这将决定单个水印的大小canvas.width = 300canvas.height = 150// 获取canvas的2D绘图上下文const ctx = canvas.getContext('2d')// 配置水印文字的样式ctx.font = '16px Arial'  // 设置字体大小和字体族ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'  // 设置文字颜色和透明度ctx.rotate(-15 * Math.PI / 180)  // 将文字旋转-15度(逆时针)ctx.fillText(text, 0, 100)  // 在canvas上绘制文本// 创建一个div元素作为水印容器const div = document.createElement('div')div.id = 'watermark'  // 设置id,方便后续查找和删除div.style.position = 'fixed'  // 固定定位,相对于浏览器窗口div.style.top = '0'  // 顶部对齐div.style.left = '0'  // 左侧对齐div.style.width = '100%'  // 宽度铺满div.style.height = '100%'  // 高度铺满div.style.background = `url(${canvas.toDataURL()}) repeat`  // 将canvas转换为图片URL并设置为重复背景div.style.pointerEvents = 'none'  // 使水印不影响页面交互div.style.zIndex = '9999'  // 设置较高的层级,确保水印显示在其他元素之上// 将水印容器添加到页面的body元素中document.body.appendChild(div)
} 

使用实例:

//页面导入
import { addWatermark } from '@/utils/common/watermark' // 需要创建这个工具函数//添加水印
addWatermark('机密文件')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15608.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

食品饮料生产瓶颈?富唯智能协作机器人来 “破壁”

在食品和饮料行业的发展进程中,诸多生产瓶颈如重复性劳动负担、复杂环境作业难题、季节性产能波动等,长期制约着企业的高效运营与进一步发展。如今,富唯智能协作机器人的出现,为这些难题提供了完美的解决方案,正逐步改…

[创业之路-289]:《产品开发管理-方法.流程.工具 》-15- 需求管理 - 第1步:原始需求收集

概述: 需求收集是需求管理的第一步,也是产品开发、项目管理或软件设计中的关键步骤。原始需求收集主要是指从各种来源获取关于产品或服务的初步需求和期望。 以下是对需求管理中的原始需求收集的详细分析: 1、原始需求收集的目的 原始需求…

81页精品PPT | 华为流程与信息化实践与架构规划分享

华为流程与信息化实践与架构规划分享主要围绕华为在业务流程与信息化建设方面的经验、企业架构规划方法以及企业数字化转型路径展开。华为通过持续的业务变革和信息化建设,从本土企业逐步发展为国际化、全球化企业,其管理体系以持续创新和世界级管理体系…

DeepSeek 实践总结

目录 1、与AI对话-万能公式 chatbox 谷歌插件方式 命令行方式 2、ChatPPT+DeepSeek形成PPT 1、与AI对话-万能公式 *明确身份+任务+细节描述+输出格式* 这样的方式能更加准确的帮助你快速获得接近你想法的内容。 身份:你是谁?(网络负责人/记者/老师。。。)任务:要解决什…

51c自动驾驶~合集49

我自己的原文哦~ https://blog.51cto.com/whaosoft/13164876 #Ultra-AV 轨迹预测新基准!清华开源:统一自动驾驶纵向轨迹数据集 自动驾驶车辆在交通运输领域展现出巨大潜力,而理解其纵向驾驶行为是实现安全高效自动驾驶的关键。现有的开…

【AI学习】LLM的发展方向

个人的思考,请大家批评。 这一轮AI浪潮,叙事的主要逻辑就是scaling law,模型越大,性能越好,投入越大,性能越好,回报越高,等等。当然,首先要有一个能够scaling的模型架构…

C语言学习笔记:子函数的调用实现各个位的累加和

在C语言程序学习之初,我们都会学习如何打印 hello world,在学习时我们知道了int main()是主函数,程序从main函数开始执行,这是流程控制的一部分内容。在主函数中我们想要实现一些功能,比如求各个…

白话文实战Nacos(保姆级教程)

前言 上一篇博客 我们创建好了微服务项目,本篇博客来体验一下Nacos作为注册中心和配置中心的功能。 注册中心 如果我们启动了一个Nacos注册中心,那么微服务比如订单服务,启动后就可以连上注册中心把自己注册上去,这过程就是服务注册。每个微服务,比如商品服务都应该注册…

2025.2.9 每日学习记录2:技术报告写了一半+一点点读后感

0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右,一次性备考笔试的三个科目 1.实习申请技术准备:微调、Agent、RAG 1.今日完成任务 1.电子斗蛐蛐(文本书写领域&am…

【Git】ssh如何配置gitlab+github

当我们工作项目在gitlab上,又希望同时能更新自己个人的github项目时,可能因为隐私问题,不能使用同一′密钥。就需要在本地电脑上分别配置两次ssh。 1、分别创建ssh key 在用户主目录下,查询是否存在“.ssh”文件: 如…

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 &#x1f…

Spring Boot牵手Redisson:分布式锁实战秘籍

一、引言 在当今的分布式系统架构中,随着业务规模的不断扩大和系统复杂度的日益增加,如何确保多个服务节点之间的数据一致性和操作的原子性成为了一个至关重要的问题。在单机环境下,我们可以轻松地使用线程锁或进程锁来控制对共享资源的访问,但在分布式系统中,由于各个服务…

apache-poi导出excel数据

excel导出 自动设置宽度&#xff0c;设置标题框&#xff0c;设置数据边框。 excel导出 添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>…

畅游Diffusion数字人(16):由音乐驱动跳舞视频生成

畅游Diffusion数字人(0):专栏文章导航 前言:从Pose到跳舞视频生成的工作非常多,但是还没有直接从音乐驱动生成的工作。最近字节跳动提出了MuseDance,无需复杂的动作引导输入(如姿势或深度序列),从而使不同专业水平的用户都能轻松进行灵活且富有创意的视频生成。 目录 贡…

Kokoro 开源文本转语音引擎上线!多语言支持,无需联网,浏览器内极速运行

Kokoro 是一款轻量级的开源文本转语音(TTS)引擎,凭借其高效能和轻量化设计,迅速在技术社区中引起关注。本文将详细介绍 Kokoro 的主要特点,并提供在浏览器和 Python 环境中的代码示例,帮助您快速上手。 1. Kokoro:可在浏览器中运行的 TTS 引擎 1.1 简介 Kokoro 是一个…

人工智能学习(七)之神经网络

目录 一、引言 二、经典神经网络回顾 &#xff08;一&#xff09;结构与计算过程 &#xff08;二&#xff09;局限性 三、循环神经网络&#xff08;RNN&#xff09;原理 &#xff08;一&#xff09;基本结构 &#xff08;二&#xff09;计算过程 &#xff08;三&#xf…

在Java中操作Redis

4.在Java中操作Redis 4.1 Redis的Java客户端 前面我们讲解了Redis的常用命令&#xff0c;这些命令是我们操作Redis的基础&#xff0c;那么我们在java程序中应该如何操作Redis呢&#xff1f;这就需要使用Redis的Java客户端&#xff0c;就如同我们使用JDBC操作MySQL数据库一样。…

大语言模型需要的可观测性数据的关联方式

可观测性数据的关联方式及其优缺点 随着现代分布式架构和微服务的普及&#xff0c;可观测性&#xff08;Observability&#xff09;已经成为确保系统健康、排查故障、优化性能的重要组成部分。有效的可观测性数据关联方式不仅能够帮助我们实时监控系统的运行状态&#xff0c;还…

棱光PDF工具箱:一站式解决你的各种需要

今天为大家介绍一款非常实用且完全免费的PDF工具箱——棱光PDF工具箱。它功能强大&#xff0c;操作简单&#xff0c;能够满足你对PDF文件的各种处理需求&#xff0c;包括添加水印、去除水印、批量转换格式等&#xff0c;绝对值得推荐&#xff01; 棱光PDF工具箱 棱光PDF工具箱…

Docker安装Redis

一、保证Docker提起来了 systemctl status docker想这没有启动要先启动一下 systemctl status docke二、拉取Redis&#xff08;默认拉最新版&#xff09; sudo docker pull redis检查一下拉成功没有 docker images三、创建相关目录 mkdir -p /home/redis/{conf,data}四、…