waterMark

98 阅读1分钟

```
import React, { useEffect, useRef } from 'react'

import SvgMark from './svg';

const WaterMark: React.FC<{

fillOpacity?: string;

text?: string;

fontSize?: number;

fillColor?: string;

id: string;

}> = (props) => {

const { fillColor = '#e0e0e0', fillOpacity = '0.5', fontSize = 20, text = '', id = 'marked' } = props;

const elementID = `waterMark-${id}`;

const waterRef = useRef(null);

const mark = SvgMark({ fillColor, fillOpacity, fontSize, text });

const blob = new Blob([mark], {

type: 'image/svg+xml',

});

const url = URL.createObjectURL(blob);

const { MutationObserver } = window;

const getElement = (id: string) => document.getElementById(id);

const setWaterMark = () => {

const watermarkDiv = document.createElement('div');

const styleStr = `

position:absolute;

top:0;

left:0;

width:100%;

height:100%;

z-index:${1002};

pointer-events:none;

background-repeat:repeat;

background-image:url('${url}')`;

watermarkDiv.setAttribute('style', styleStr);

watermarkDiv.setAttribute('id', elementID); // 在元素中添加类名,可以加载CSS样式

const container = getElement(id);

if (container) {

container.insertBefore(watermarkDiv, container.firstChild);

}

};

useEffect(() => {

setWaterMark();

const observer = new MutationObserver(() => {

if (!getElement(elementID)) {

setWaterMark();

}

});

if (getElement(elementID)) {

observer.observe(document.body, {

attributes: true,

characterData: true,

childList: true,

subtree: true,

attributeOldValue: true,

characterDataOldValue: true,

});

}

}, [waterRef, elementID]);

return

;

};

export default WaterMark;

```