码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • VUE页面添加水印


    1. let watermark = {};
    2. let setWatermark = (text, sourceBody) => {
    3. let id = 'watermark_fjq_' + parseInt(Math.random() * 100000);
    4. if (document.getElementById(id) !== null) {
    5. document.body.removeChild(document.getElementById(id));
    6. }
    7. //水印图片
    8. let can = document.createElement('canvas');
    9. can.width = 373;// 单个水印大小
    10. can.height = 320;// 单个水印大小
    11. let cans = can.getContext('2d');
    12. cans.rotate(-20 * Math.PI / 180);
    13. cans.font = '14px Vedana';
    14. cans.fillStyle = '#DCDCDC';//水印颜色
    15. cans.textAlign = 'left';
    16. cans.textBaseline = 'Middle';
    17. cans.fillText(text, can.width / 20, can.height);//水印在画布的位置
    18. //设置插入div样式
    19. let water_div = document.createElement('div');
    20. water_div.id = id;
    21. water_div.style.pointerEvents = 'none';//水印层事件穿透 让水印不阻止交互事件
    22. water_div.style.overflow = 'hidden';
    23. water_div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
    24. if (sourceBody) {
    25. sourceBody.style.position = 'relative';
    26. water_div.style.width = '100%';
    27. water_div.style.height = '100%';
    28. water_div.style.position = 'absolute';
    29. water_div.style.top = '0';
    30. water_div.style.left = '0';
    31. sourceBody.appendChild(water_div);
    32. } else {
    33. water_div.style.top = '3px';
    34. water_div.style.left = '0px';
    35. water_div.style.position = 'fixed';
    36. water_div.style.zIndex = '0';
    37. water_div.style.width = document.documentElement.clientWidth + 'px';
    38. water_div.style.height = document.documentElement.clientHeight + 'px';
    39. document.body.appendChild(water_div);
    40. }
    41. return id;
    42. }
    43. /**
    44. * 该方法只允许调用一次
    45. * @param:
    46. * @text == 水印内容
    47. * @sourceBody == 水印添加在哪里,不传就是body
    48. * */
    49. watermark.set = (text, sourceBody) => {
    50. setTimeout(() => {
    51. setWatermark(text, sourceBody);
    52. }, 1000);//延迟加载
    53. }
    54. export default watermark;

    水印原理:前端水印的实现原理主要是利用canvas标签的一些属性,把水印图片作为div的背景图片

    创建canvas元素
    给canvas绘制文本,填充样式旋转角度、文字字体颜色等
    将绘制好的canvas元素转换成base64格式的图片
    动态创建一个div标签,相对位置属性为fixed,宽高设置为屏幕的可见大小,将上一步canvas转换的图片设置为div的背景图片并平铺满整个内部
    最后将动态创建的div添加到body中sourceBody是添加的位置

    注意点

    好不容易在画布中绘制出酷炫的图形,应该把它保存起来吧。但不幸的是,画布中的这些图形本身不是真正的图片,不能直接保存。不幸中的万幸,Canvas API提供了toDataURL()方法,可以把画布中的图形转换为图片,

    默认情况下,toDataURL()方法把图形转变成base64编码格式的png,然后返回Data URL数据。可以给toDataURL()传入MIME类型的参数,将画布转变成其它格式的图片。

    有了Data URL数据后,就可将这些数据直接填充到元素里,或者直接从浏览器里下载它们。这里通过一个实例,来说明如何使用toDataURL()方法,把整个画布保存为图片

    局部页面使用:把warterMarkVUE.js文件引用到单页面内即可使用

    全局使用:在App.vue中引用,

    1. import watermark from "./warterMarkVUE";
    2. mounted() {
    3. this.staffName =
    4. JSON.parse(sessionStorage.getItem("userInfo")) &&
    5. JSON.parse(sessionStorage.getItem("userInfo")).staffName
    6. ? JSON.parse(sessionStorage.getItem("userInfo")).staffName
    7. : "";
    8. this.staffCode =
    9. JSON.parse(sessionStorage.getItem("userInfo")) &&
    10. JSON.parse(sessionStorage.getItem("userInfo")).staffCode
    11. ? JSON.parse(sessionStorage.getItem("userInfo")).staffCode
    12. : "";
    13. var timer = this.dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss");
    14. if (
    15. JSON.parse(sessionStorage.getItem("userInfo")) &&
    16. JSON.parse(sessionStorage.getItem("userInfo")).staffName
    17. ) {
    18. watermark.set(this.staffCode + " " + this.staffName + " " + timer); //设置水印名称
    19. }
    20. },

    前端添加水印效果攻略【vue和原生js添加方式】_水香木鱼的博客-CSDN博客_前端页面使用js水印功能
    vue实现为页面加水印 - 范斯 - 博客园
    前端添加水印效果攻略【vue和原生js添加方式】_水香木鱼的博客-CSDN博客_前端页面使用js水印功能
    前端页面添加水印_泡泡大怪兽的博客-CSDN博客_网页增加水印
    vue实现给页面添加水印_前端搬砖王妹妹的博客-CSDN博客_vue页面添加水印
    vue全局加水印(除登录页面)_陈噜啦的博客-CSDN博客_vue 加水印
     

  • 相关阅读:
    计算机考研计算机组成原理题库
    在SSD268G上运行第一个demo
    DHCP服务的八种报文(消息)作用
    1158. 市场分析 I
    基于Python的电子病历实体识别系统
    1.5.4 HDFS 客户端操作-hadoop-最全最完整的保姆级的java大数据学习资料
    全网最全Java快捷键~
    卫星位姿的相关概念
    一起Talk Android吧(第四百回:Glide的基本用法)
    RT-DETR手把手教程,注意力机制如何添加在网络的不同位置进行创新优化,EMA注意力为案列
  • 原文地址:https://blog.csdn.net/qq_40231344/article/details/126563809
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号