UNPKG

water-mask-page

Version:

水印,页面水印

64 lines (63 loc) 2.89 kB
import React, { useEffect } from "react"; function WaterMaskPage(props) { var children = props.children; useEffect(function () { watermark(props); }, []); var currentMask = function () { var container = document.querySelector('#__water_mask'); var node = null; container && container.childNodes.forEach(function (childNode) { var classes = childNode.classList; if (classes.contains('__wm')) { node = childNode; } }); return node; }; var watermark = function (params) { var container = document.querySelector('#__water_mask'); var fontSize = params.fontSize, opacity = params.opacity, fillStyle = params.color, content = params.content, width = params.width, height = params.height, textAlign = params.textAlign, textBaseline = params.textBaseline, _a = params.feedHeight, feedHeight = _a === void 0 ? 28 : _a, _b = params.rotate, rotate = _b === void 0 ? -20 : _b, _c = params.zIndex, zIndex = _c === void 0 ? 1000 : _c; var canvas = document.createElement('canvas'); var widthStr = width + "px;"; canvas.setAttribute('width', widthStr); canvas.setAttribute('height', String(height) + 'px'); var ctx = canvas.getContext('2d'); if (!ctx) { return; } ctx.textAlign = textAlign; ctx.textBaseline = textBaseline; ctx.font = fontSize + "px Microsoft Yahei"; ctx.fillStyle = fillStyle; ctx.rotate((Math.PI / 180) * rotate); ctx.globalAlpha = opacity / 100; var textArray = decodeURIComponent(content).split('\n'); textArray.forEach(function (str, index) { ctx.fillText(str, 0, height / 2 + index * feedHeight); }); var base64Url = canvas.toDataURL(); var __wm = currentMask(); var watermarkDiv = __wm || document.createElement('div'); var styleStr = "\n position:absolute;\n top:0;\n left:0;\n width:100%;\n height:100%;\n z-index:" + zIndex + ";\n pointer-events:none;\n background-repeat:repeat;\n background-image:url('" + base64Url + "')\n "; watermarkDiv.setAttribute('style', styleStr); watermarkDiv.classList.add('__wm'); if (!__wm && container) { container.insertBefore(watermarkDiv, container.firstChild); } }; return (React.createElement("div", { id: '__water_mask' }, children)); } ; WaterMaskPage.defaultProps = { children: (React.createElement("div", { style: { width: '100px', height: '200px' } }, "\u6B22\u8FCE\u4F7F\u7528\u8131\u654F\u6C34\u5370\uFF01")), fontSize: 16, color: '#999', opacity: 30, content: '脱敏水印', width: 150, height: 100, textAlign: 'left', textBaseline: 'middle', }; export default WaterMaskPage;