当前位置:首页 > 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实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

vue实现水印组件

vue实现水印组件

Vue 水印组件的实现方法 使用Canvas绘制水印 在Vue组件中通过Canvas动态生成水印图案,将其作为背景添加到目标元素上。 <template> <div ref="…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…