欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【功能模块】-- 水印效果

【功能模块】-- 水印效果

2024/10/25 19:32:57 来源:https://blog.csdn.net/weixin_41092986/article/details/142828126  浏览:    关键词:【功能模块】-- 水印效果

目录
         👊🏻实现思路
                创建canvas
                        创建div并添加canvas
                ​​​​​​​        将div加入document中
                具体实现
                ​​​​​​​        创建canvas
                ​​​​​​​        创建div并添加canvas
                ​​​​​​​        将div加入document中
                ​​​​​​总结


很多时候,我们会遇到各种各样的需求。今天我们来讲讲水印的实现方式,通俗易懂,拎包即用!

 👊🏻实现思路

  • 创建canvas

对canvas感兴趣的,可以看我这一系列文章
你真的了解Canvas吗--解密一【ZRender篇】
你真的了解Canvas吗--解密二【ZRender篇】等等,我就不一一罗列了,占字数~

  • 创建div并添加canvas

一个最高层脱离文档流的div并添加canvas

  • 将div加入document中

具体实现

  • 创建canvas
const createCanvas = () => {const can = document.createElement("canvas"); can.width = 300;can.height = 180;const ctx = can.getContext("2d"); ctx.rotate((-30 * Math.PI) / 180); //旋转角度ctx.font = "15px Vedana"; ctx.fillStyle = "#666666"; ctx.textAlign = "center"; ctx.textBaseline = "Middle"; ctx.fillText(loginName, can.width / 2, can.height);ctx.fillText(time, can.width / 2, can.height + 22); return can;
}
  • 创建div并添加canvas
const createTopDiv = (id, can) => {const div = document.createElement("div");div.id = id;div.style.pointerEvents = "none"; // 不再监听当前图层的鼠标事件,而去监听下一层中元素的鼠标事件(穿透)div.style.top = "40px";div.style.left = "0px";div.style.opacity = "0.15";div.style.position = "fixed";div.style.zIndex = "100000";div.style.width = document.documentElement.clientWidth + "px";div.style.height = document.documentElement.clientHeight + "px";div.style.background ="url(" + can.toDataURL("image/png") + ") left top repeat";return div;
}
  1. 放最上层就是要保证水印的效果 
  2. 使用css3的pointerEvents = “none”透传特性
  3. 设置background属性为"url(" + can.toDataURL("image/png") + ") left top repeat"
  • 将div加入document中
const setWatermark = () => {let id = waterId;if (document.getElementById(id) != null) {document.body.removeChild(document.getElementById(id));} //创建一个画布const can = createCanvas();//创建一个最高层脱离文档流的divconst div = createTopDiv(id, can);//加入document中document.body.appendChild(div);return id;
};

这里面的waterId大家可以设置的复杂一点,防止重复

总结

好了,水印功能完工,是不是通俗易懂。有问题可以给我留言哦! 

效果截图

我把对应的代码也上传了,想看源码的可以去翻找一下!!!

如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com