当前位置:首页 > JavaScript

js 实现水印

2026-03-02 04:35:41JavaScript

实现水印的几种方法

使用Canvas生成水印

通过Canvas绘制水印文字或图片,转换为Base64后设置为背景。

function createWatermark(text) {
  const canvas = document.createElement('canvas');
  canvas.width = 200;
  canvas.height = 150;
  const ctx = canvas.getContext('2d');
  ctx.font = '16px Arial';
  ctx.fillStyle = 'rgba(200, 200, 200, 0.3)';
  ctx.rotate(-0.3);
  ctx.fillText(text, 10, 100);
  return canvas.toDataURL('image/png');
}

document.body.style.backgroundImage = `url(${createWatermark('Watermark')})`;

使用CSS伪元素

通过CSS的::after或::before伪元素添加水印,适合简单场景。

const watermark = document.createElement('div');
watermark.className = 'watermark';
watermark.innerHTML = 'Watermark';
document.body.appendChild(watermark);
.watermark {
  position: fixed;
  opacity: 0.3;
  font-size: 50px;
  color: #cccccc;
  z-index: 9999;
  transform: rotate(-30deg);
  pointer-events: none;
}

使用SVG生成水印

SVG水印具有矢量特性,适合需要缩放的情况。

js 实现水印

function createSvgWatermark(text) {
  const svg = `
    <svg xmlns="http://www.w3.org/2000/svg" width="200" height="100">
      <text x="10" y="50" font-family="Arial" font-size="20" 
        fill="rgba(200,200,200,0.3)" transform="rotate(-30)">
        ${text}
      </text>
    </svg>`;
  return `data:image/svg+xml;base64,${btoa(svg)}`;
}

document.body.style.backgroundImage = `url("${createSvgWatermark('SVG Watermark')}")`;

防止水印被移除

MutationObserver监听DOM变化

通过监听DOM变化检测水印是否被移除。

const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    if (!document.querySelector('.watermark')) {
      createWatermark();
    }
  });
});

observer.observe(document.body, {
  childList: true,
  subtree: true
});

重复覆盖整个页面

创建多个水印元素覆盖整个页面,增加移除难度。

js 实现水印

function createFullPageWatermark(text) {
  const container = document.createElement('div');
  container.style.position = 'fixed';
  container.style.top = '0';
  container.style.left = '0';
  container.style.width = '100%';
  container.style.height = '100%';
  container.style.pointerEvents = 'none';
  container.style.zIndex = '9999';

  for (let i = 0; i < 100; i++) {
    const watermark = document.createElement('div');
    watermark.textContent = text;
    watermark.style.position = 'absolute';
    watermark.style.opacity = '0.1';
    watermark.style.transform = `rotate(-30deg)`;
    watermark.style.left = `${Math.random() * 100}%`;
    watermark.style.top = `${Math.random() * 100}%`;
    container.appendChild(watermark);
  }

  document.body.appendChild(container);
}

动态水印

绑定用户信息

将水印内容与用户信息绑定,增加溯源能力。

function createUserWatermark(userInfo) {
  const watermarkText = `${userInfo.name} ${userInfo.id}`;
  createWatermark(watermarkText);
}

周期性更新水印

定时更新水印内容或位置,防止被截图规避。

setInterval(() => {
  const watermarks = document.querySelectorAll('.watermark');
  watermarks.forEach(wm => {
    wm.style.left = `${Math.random() * 100}%`;
    wm.style.top = `${Math.random() * 100}%`;
  });
}, 5000);

标签: 水印js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1;…