前端页面水印

简介: 前端页面水印 https://juejin.cn/post/7101140051215515684

前端真是个大杂烩,有些需求又不能反驳,后端不做水印处理(官方吐槽:因为后端要走了,很是懈怠。),故前端来做,那就做吧。毕竟我们要励志做一个全名boy。奉行拿来主义,小伙伴们,下面的直接引用就可以使用了

 export function __waterDocument({
  container = document.body,
  width = '200px',
  height = '150px',
  textAlign = 'center',
  textBaseline = 'middle',
  font = "10px Microsoft Yahei",
  fillStyle = 'rgba(220,20,60, 0.2)',
  // fillStyle = 'rgba(230, 230, 230, 0.2)',
  content = '保密水印',
  rotate = 45,
  zIndex = 1000
} = {}) {
  const args = arguments[0];
  const canvas = document.createElement('canvas');
  canvas.setAttribute('width', width);
  canvas.setAttribute('height', height);
  const ctx = canvas.getContext("2d");
  if (ctx === null) {
    console.error("this browser is not support canvas.");
    return;
  }
  ctx.textAlign = textAlign; // 文本对齐设置。可能的值:start,end,left,right或center。默认值为start。
  ctx.textBaseline = textBaseline; // 基线对齐设置。可能的值:top、hanging、middle、alphabetic、ideographic、bottom。默认值为alphabetic
  ctx.font = font; // 绘制文本时使用的当前文本样式。此字符串使用与CSS font属性相同的语法。默认字体为 10px sans-serif。
  ctx.fillStyle = fillStyle;
  ctx.rotate((Math.PI / 180) * rotate);
  // ctx.rotate(`${rotate}deg`);
  // ctx.fillText(content, 0, 0);
  ctx.fillText(content, parseFloat(width) / 2, parseFloat(height) / 2);
  const base64Url = canvas.toDataURL();
  const __wm = document.querySelector('.__wm');
  const watermarkDiv = __wm || document.createElement("div");
  const styleStr = `
      position:absolute;
      top:0;
      left:0;
      width:100%;
      height:100%;
      z-index:${zIndex};
      pointer-events:none;
      background-repeat:repeat;
      background-image:url('${base64Url}')`;
  watermarkDiv.setAttribute('style', styleStr);
  watermarkDiv.classList.add('__wm');
  if (!__wm) {
    container.style.position = 'relative';
    container.insertBefore(watermarkDiv, container.firstChild);
  }
  const MutationObserver = window.MutationObserver || window.WebKitMutationObserver;
  if (MutationObserver) {
    let mo = new MutationObserver(function () {
      const __wm = document.querySelector('.__wm');
      // 只在__wm元素变动才重新调用 __canvasWM
      if ((__wm && __wm.getAttribute('style') !== styleStr) || !__wm) {
        // 避免一直触发
        mo.disconnect();
        mo = null;
        /*eslint no-undef-init: "error"*/
        __canvasWM(JSON.parse(JSON.stringify(args)));
      }
    });
    mo.observe(container, {
      attributes: true,
      subtree: true,
      childList: true
    });
  }
}
import { __waterDocument} from '../utils/watermark_canvas';
__waterDocument({content: radData.doctorName}); // 看你们在业务里哪里需要,就在哪里用,我这因为在页面出来时使用。我使用的是vue,所以就在mounted生命周期里调用了,
结束语:关注我,少走弯路!

2a6b3f28e28f61710efcaba58c6073e.png

相关文章
|
3月前
|
缓存 前端开发 JavaScript
如何优化前端页面性能
前端性能优化是网站开发中非常重要的一部分,它直接关系到用户体验和网站的流量以及排名。本文将介绍一些优化前端页面性能的方法,包括减少HTTP请求、压缩代码、使用CDN等。
|
2月前
|
存储 前端开发 JavaScript
【JavaEE初阶】 博客系统项目--前端页面设计实现
【JavaEE初阶】 博客系统项目--前端页面设计实现
|
6月前
|
缓存 前端开发 JavaScript
【前端用法】jquery获取当前页面的URL信息
【前端用法】jquery获取当前页面的URL信息
51 0
|
6月前
|
前端开发 安全 JavaScript
关于前端页面测试和抵御 clickjacking attack 的一些方法
关于前端页面测试和抵御 clickjacking attack 的一些方法
51 0
|
2月前
|
存储 前端开发 安全
无限连接:前端跨页面通信的实现与应用
在前端开发中,有时我们需要在不同的页面之间进行数据传递和交互。这种场景下,前端跨页面通信就显得尤为重要。前端跨页面通信是指在不同的页面之间传递数据、发送消息以及实现页面间的交互操作。本文将详细介绍前端跨页面通信的属性、应用场景以及实现方法,并提供一些代码示例和引用资料,帮助读者深入了解并应用这一重要的技术。
|
7月前
|
开发框架 前端开发 JavaScript
前端框架Layui的使用讲解(Layui搭建登录注册页面)(一)
前端框架Layui的使用讲解(Layui搭建登录注册页面)
427 0
|
3月前
|
移动开发 监控 前端开发
HTML5与CSS3教学:美化员工行为监控软件前端页面的代码技巧
在当今信息时代,企业对员工行为的监控成为了一项必不可少的工作。而员工行为监控软件作为一种高效的管理工具,其前端页面的设计和美化显得尤为重要。本文将介绍如何利用HTML5和CSS3技术,优雅地美化员工行为监控软件前端页面的代码技巧。
210 0
|
4月前
|
JSON 前端开发 Java
(简易详细)spring boot 使用拦截器 实现拦截前端请求并返回json到前端页面
(简易详细)spring boot 使用拦截器 实现拦截前端请求并返回json到前端页面
99 0
|
4月前
|
前端开发
前端知识笔记(十八)———页面首次滑动不可返回
前端知识笔记(十八)———页面首次滑动不可返回
19 0
|
5月前
|
JavaScript 前端开发 Java
在Vue中通过ElementUI构建前端页面【登录,注册】,在IEDA构建后端实现前后端分离
在Vue中通过ElementUI构建前端页面【登录,注册】,在IEDA构建后端实现前后端分离
140 0