当前位置:首页 > JavaScript

js实现水印

2026-03-02 05:58:40JavaScript

使用Canvas绘制水印

在HTML中创建一个Canvas元素,通过JavaScript绘制文本或图片作为水印。Canvas提供了灵活的控制方式,可以调整水印的透明度、旋转角度和位置。

function createWatermark(text) {
  const canvas = document.createElement('canvas');
  canvas.width = 200;
  canvas.height = 100;
  const ctx = canvas.getContext('2d');

  ctx.font = '16px Arial';
  ctx.fillStyle = 'rgba(200, 200, 200, 0.5)';
  ctx.rotate(-0.2);
  ctx.fillText(text, 10, 50);

  return canvas.toDataURL();
}

const watermark = document.createElement('div');
watermark.style.position = 'fixed';
watermark.style.top = '0';
watermark.style.left = '0';
watermark.style.width = '100%';
watermark.style.height = '100%';
watermark.style.pointerEvents = 'none';
watermark.style.backgroundImage = `url(${createWatermark('Confidential')})`;
watermark.style.backgroundRepeat = 'repeat';

document.body.appendChild(watermark);

使用CSS伪元素添加水印

通过CSS的::after或::before伪元素实现简单水印效果,适合不需要复杂样式的水印场景。这种方法性能较好,但自定义程度有限。

const style = document.createElement('style');
style.innerHTML = `
  body::after {
    content: "Watermark Text";
    position: fixed;
    opacity: 0.2;
    font-size: 50px;
    color: #cccccc;
    z-index: 9999;
    transform: rotate(-30deg);
    pointer-events: none;
    left: 30%;
    top: 40%;
  }
`;
document.head.appendChild(style);

SVG背景水印方案

使用SVG创建可缩放的水印图形,特别适合需要高清晰度显示的场景。SVG水印可以完美适应不同屏幕尺寸而不失真。

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

const watermarkDiv = document.createElement('div');
watermarkDiv.style.cssText = `
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  background-image: url("${createSvgWatermark('SECRET')}");
  background-repeat: repeat;
  z-index: 9999;
`;
document.body.appendChild(watermarkDiv);

防删除水印实现

为了防止用户通过开发者工具删除水印元素,可以采用MutationObserver监听DOM变化,当水印被移除时自动重新添加。

const watermark = document.createElement('div');
watermark.id = '__watermark__';
// 设置水印样式...

document.body.appendChild(watermark);

const observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    if (!document.getElementById('__watermark__')) {
      document.body.appendChild(watermark);
    }
  });
});

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

动态水印方案

结合用户信息生成个性化水印,通常用于内部系统追踪信息泄露来源。水印内容可以包含用户ID、时间戳等唯一标识信息。

function generateDynamicWatermark(userId) {
  const now = new Date();
  const watermarkText = `${userId} ${now.toISOString()}`;

  const pattern = document.createElement('canvas');
  pattern.width = 200;
  pattern.height = 100;
  const pctx = pattern.getContext('2d');

  pctx.font = '12px Arial';
  pctx.fillStyle = 'rgba(100,100,100,0.2)';
  pctx.fillText(watermarkText, 10, 20);

  const div = document.createElement('div');
  div.style.position = 'fixed';
  div.style.top = '0';
  div.style.left = '0';
  div.style.width = '100%';
  div.style.height = '100%';
  div.style.pointerEvents = 'none';
  div.style.backgroundImage = `url(${pattern.toDataURL()})`;
  div.style.backgroundRepeat = 'repeat';

  return div;
}

document.body.appendChild(generateDynamicWatermark('user123'));

js实现水印

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

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterv…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document…

vue实现水印

vue实现水印

添加静态水印 在Vue中可以通过CSS或Canvas实现静态水印。CSS方式适合简单文字水印,Canvas适合复杂图形或自定义样式。 CSS方式 通过绝对定位和透明度控制,将水印覆盖在页面上:…

js防抖和节流实现

js防抖和节流实现

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

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…