大家好,我是小梅,公众号:「小梅的前端之路」 原创作者。

作为在前端领域不断探索的一员,在此记录开发中遇到的问题,如果你也遇到了相同的问题,希望本文对你有帮助。


直接上代码,生成水印的js文件:

// const watermark = {}
// 定义设置水印的方法,
const watermarkFun = () => {// 如果水印元素已经存在就先移走,重新生成, id要是全局独一无二的const id = '3.14159261111'if (document.getElementById(id) !== null) {document.body.removeChild(document.getElementById(id))}// 第一步:生成cavas元素,使用canvas, 绘制水印const str = '我是水印ya'const canvasEle = document.createElement('canvas')// 设置单个水印元素的宽高,这决定了页面水印的密度,需要更具水印文字的大小以及长度设置合理的值canvasEle.width = 200canvasEle.height = 100const ctx = canvasEle.getContext('2d') // 绘制2d图形ctx.rotate(-20 * Math.PI / 180)// 设置水印元素的倾斜, 这一行代码要写在设置水印文字之前,涉及样式的都写在设置水印文字之前ctx.font = '16px serif' // 设置水印文字的大小和字体ctx.fillStyle = 'rgba(200, 200, 200, 0.8)' // 设置水印文字的颜色ctx.textAlign = 'left' // 文本左对齐ctx.fillText(str, canvasEle.width / 16, canvasEle.height / 2) // 设置水印文字// 第二步:把canvas转化为一张图片,作为背景图,添加到divconst divEle = document.createElement('div')divEle.id = iddivEle.style.width = document.documentElement.clientWidth - 10 + 'px' // 设置div元素的宽高divEle.style.height = document.documentElement.clientHeight - 20 + 'px'divEle.style.pointerEvents = 'none' // 元素永远不会成为鼠标事件的targetdivEle.style.position = 'fixed' // 固定定位, 让元素撑满整个可视区域divEle.style.top = '3px'divEle.style.left = '5px'divEle.style.background = 'url(' + canvasEle.toDataURL() + ') left top repeat' // 水印图片做div的背景,并且重复,这样看起来就是满屏都是水印divEle.style.zIndex = 999999 // 水印元素的权值设得大一些,以此来遮盖所有的元素// 第三步:div添加到body元素,水印生成document.body.appendChild(divEle)return id
}
// 设置水印,就调用这个方法
watermarkFun()
// 页面发生缩放,重绘水印
window.onresize = () => {watermarkFun()
}
// watermark.set = () => {
//   watermarkFun()
//   // 页面发生缩放,重绘水印
//   window.onresize = () => {
//     watermarkFun()
//   }
// }
// export default watermark

引用水印js的html文件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
243254
<div style="margin-top: 200px; margin-left: 500px;">hhhsdf<button onclick="alert('do click')">dianji</button>
</div>
<script src="./test11.js"></script>
<!--<script type="module">-->
<!--import watermark from './test11.js';--><!--  console.log(123, watermark.set())-->
<!--</script>-->
</body>
</html>

页面效果图:


❤️欢迎素质三连[点赞 + 收藏 + 评论]

我是小梅,有兴趣的话可以在微信搜一搜「小梅的前端之路」第一时间接收文章更新通知,一起沟通、学习成长呀。

使用canvas生成水印watermark,有详细注释,简单易懂相关推荐

  1. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)

    ** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...

  2. 下料问题的列生成算法,matlab代码,简单易懂

    下料问题的列生成算法,matlab代码,简单易懂 ID:18300606016240721绿兔叽

  3. python 抖音评论_新手python抖音无水印解析带详细注释

    资源来源网络,如果需要授权,请大家更换源码,模块仅供学习,如需商用请购买正版授权,本栏目不提供技术服务,积分不够请签到,或者会员中心投稿源码 注释都很详细,可以看看注释!友情提醒,仅供学习使用,请勿用 ...

  4. 原生JS Canvas 粒子漂浮 效果 (详细注释)

    其实用Canvas 实现粒子效果 很简单. 知道 Canvas 怎么画出 圆形( arc 函数 ), 圆形的移动就是 arc 函数 定位参数变化的问题. // x.y 变化 并且 每帧重绘 ,让我们看 ...

  5. JS 验证码生成及校验(详细注释)

    这是个非常简单的(粗糙)模拟验证码生成及校验的小案例,只简单的实现下功能,后续希望可以做验证码背景是有颗粒的,同时有干扰线...更符合实际场景的验证码生成及校验. 完整代码如下: <!DOCTY ...

  6. 冒泡法排序(详细注释,易懂)

    描述 输入10个整数,用冒泡法对他们进行从大到小排序并输出.‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬ ...

  7. 二、前端pink老师的CSS定位学习笔记(超详细,简单易懂)

    定位(position) 1. CSS 布局的三种机制 网页布局的核心 -- 就是用 CSS 来摆放盒子位置. CSS 提供了 3 种机制来设置盒子的摆放位置,分别是普通流.浮动和定位,其中: 普通流 ...

  8. 用itchat导入微信好友信息并保存(详细)简单易懂

    前言 之前在blink发了一条说说(可以去我主页看),后来想想虽然是一个small white

  9. rtl8811au黑苹果10.15_超简单的黑苹果系统安装教程,步骤超详细,简单易懂

    苹果系统由于经过专门的优化,比Windows要好用得多,而且MAC系统软件基本没有广告,没有流氓软件,而且显示效果特别棒,对于我们工作和生活是个很好的生产工具,但是在MAC电脑的高昂售价面前,很多朋友 ...

最新文章

  1. Java反射中method.isBridge() 桥接方法
  2. 转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念
  3. mysql性能监控指标及分析
  4. 将RGB格式的颜色值转换为十六进制
  5. 风雨彩虹,铿锵玫瑰——女足夺冠
  6. 用keras作CNN卷积网络书本分类(书本、非书本)
  7. Android之解决APP奔溃重启导致Fragment白屏问题
  8. 计算机专业术语的通俗解释,计算机专业术语解释
  9. Vue三大核心概念之二(事件)
  10. 苹果cmsv10仿爱客影视搜索自适应模板
  11. matlab节约里程法_vrp几种算法的matlab源代码(扫描算法,禁忌搜索算法,节约里程算法)...
  12. 推荐-最新PSP游戏下载,不用注册直接下载!(1)
  13. 空间解析几何 | 平面束方程及其应用
  14. 多人共同在线文档协同编辑的技术实现
  15. 我的硬盘居然被win10安装工具_科研工具 | SPSS 25中文版软件下载和安装教程|兼容WIN10...
  16. 文件夹有个蓝色箭头_带有双蓝色箭头的Windows文件夹图标是什么意思?
  17. 英特服务器的spec整数性能,主流基准测试TPC与SPEC解读
  18. 小技巧 CSR蓝牙连接问题
  19. 【人工智能】院士谈新一代人工智能五大智能方向
  20. 缓冲区溢出之栈溢出利用(手动编写无 payload 的 Exploit)

热门文章

  1. python300行代码_Python:游戏:300行代码实现俄罗斯方块
  2. Excel区间数据拆分
  3. zurb是什么网站_Zurb的Tribute库的Vue.js包装器,用于本机@mentions
  4. 把网页保存成markdowm的方法
  5. html5 canvas爆炸,html5 canvas彩色爆炸的小球动画特效
  6. 单片机编程系列之分层设计2(怎样合理拆分子系统)
  7. Java基础教程1-Java特点和手把手教你安装JDK
  8. mp4类文件的AAC编码完美修复方法
  9. 前端进度报告(2018.6.3)
  10. 《信息技术》期刊简介