当前位置:首页 > React

react模态框如何加水印

2026-01-25 02:44:44React

添加水印的基本方法

在React模态框中添加水印可以通过CSS背景或Canvas绘制实现。CSS方法简单高效,适合静态水印;Canvas则支持动态内容和复杂效果。

// CSS背景水印示例
.modal-watermark {
  position: relative;
}
.modal-watermark::after {
  content: "CONFIDENTIAL";
  position: absolute;
  opacity: 0.2;
  font-size: 40px;
  transform: rotate(-30deg);
  pointer-events: none;
}

使用Canvas动态生成

通过React的useEffect钩子和Canvas API可以创建动态水印,支持自定义文本、角度和透明度:

import { useEffect, useRef } from 'react';

function WatermarkCanvas({ text }) {
  const canvasRef = useRef(null);

  useEffect(() => {
    const canvas = canvasRef.current;
    const ctx = canvas.getContext('2d');
    ctx.font = '20px Arial';
    ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
    ctx.rotate(-0.3);
    ctx.fillText(text, 20, 70);
  }, [text]);

  return <canvas ref={canvasRef} className="watermark-canvas" />;
}

防止水印被移除

为确保水印难以被开发者工具删除,可采用DOM监控方案:

const observer = new MutationObserver((mutations) => {
  mutations.forEach(() => {
    const watermark = document.querySelector('.watermark');
    if (!watermark) {
      document.body.appendChild(createWatermark());
    }
  });
});
observer.observe(document.body, { childList: true });

第三方库方案

使用现成库如react-watermark可快速实现:

npm install react-watermark
import Watermark from 'react-watermark';

<Modal>
  <Watermark text="SAMPLE" opacity={0.1}>
    <div>模态内容</div>
  </Watermark>
</Modal>

响应式水印布局

结合ResizeObserver确保水印适应不同屏幕尺寸:

const resizeObserver = new ResizeObserver((entries) => {
  entries.forEach(entry => {
    const { width } = entry.contentRect;
    const fontSize = Math.max(16, width / 30);
    canvasRef.current.style.fontSize = `${fontSize}px`;
  });
});
resizeObserver.observe(containerRef.current);

react模态框如何加水印

标签: 水印模态
分享给朋友:

相关文章

vue实现pdf水印

vue实现pdf水印

添加PDF水印的实现方法 在Vue中实现PDF水印可以通过以下步骤完成,主要依赖第三方库如pdf-lib或pdf.js。 使用pdf-lib库添加水印 安装pdf-lib库: npm instal…

vue页面实现水印

vue页面实现水印

实现Vue页面水印的方法 使用CSS背景图实现水印 在Vue组件中通过CSS添加重复水印背景,适合静态水印。 <template> <div class="watermark-…

vue怎么实现页面水印

vue怎么实现页面水印

实现页面水印的方法 在Vue中实现页面水印可以通过以下几种方式完成,根据需求选择合适的方法。 使用Canvas生成水印 通过Canvas绘制水印文本或图片,并将其作为背景插入到页面中。 //…

vue实现全局模态框

vue实现全局模态框

vue实现全局模态框的方法 使用Vue.extend创建模态框组件 通过Vue.extend创建独立的模态框构造器,挂载到DOM中实现全局调用。这种方式适合需要频繁调用的模态框场景。 // Moda…

vue组件实现模态框

vue组件实现模态框

使用 Vue 组件实现模态框 方法一:基础模态框组件 创建一个名为 Modal.vue 的组件文件,包含以下结构: <template> <div class="moda…

vue页面实现水印相机

vue页面实现水印相机

实现水印相机功能 在Vue中实现水印相机功能,可以通过结合HTML5的Canvas和拍照API完成。以下是一个完整的实现方案: 创建基础页面结构 <template> <di…