cavans制作水印 html

效果图

在这里插入图片描述

代码

<html>
  <div>124</div>
  <div>124</div>
  <div>124</div>
  <div>124</div>
  <div>124</div>
</html>
<script>
  function createMask() {
    let canvas = document.createElement("canvas");
    canvas.id = "__canvas";
    canvas.width = "120"; // 每个水印的宽高
    canvas.height = "70";
    let ctx = canvas.getContext("2d");
    ctx.fillStyle = "rgba(200, 180, 150, 0.5)";
    ctx.rotate((45 * Math.PI) / 180); // 偏转的角度
    ctx.fillText("设置水印文本", 30, 20); // 绘制文本 绘制开始位置

    let src = canvas.toDataURL("image/png"); // 将canvas转为base64图片路径本地保存

    // 水印容器
    let waterMaskDiv = document.createElement("div");

    waterMaskDiv.style.position = "fixed";
    waterMaskDiv.style.zIndex = "-1";
    waterMaskDiv.id = "water-mark";
    waterMaskDiv.style.top = "0";
    waterMaskDiv.style.left = "0";
    waterMaskDiv.style.height = "100%";
    waterMaskDiv.style.width = "100%";
    waterMaskDiv.style.pointerEvents = "none";
    waterMaskDiv.style.backgroundImage = "URL(" + src + ")";
    // 水印节点插到body下 可以通过层级控制节点层次
    document.body.appendChild(waterMaskDiv);
  }

  createMask();
  
    /** 处理会前端操作的把div删除了,做一个监控来生成水印 */
  let config = {
        childList: true,
        attributes: true,
        characterData: true,
        subtree: true,
        attributeOldValue: true,
        characterDataOldValue: true,
      };

      const mutationCallback = (mutationList) => {
        for (let mutation of mutationList) {
          mutation.removedNodes.forEach(function (item) {
            if (item.id === "water-mark") {
              createMask();
              console.log('创建了')
            }
          });
        }
      };

      // 创建 MutationObserver 实例
      let observer = new MutationObserver(mutationCallback);

      // 开始监控目标节点
      observer.observe(document.body, config);
       // 停止监控
      // observer.disconnect()
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值