当前位置:首页 > 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水印具有矢量特性,适合需要缩放的情况。

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
});

重复覆盖整个页面

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

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);
}

周期性更新水印

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

js 实现水印

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防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…