UNPKG

watermarkjs-plugin

Version:

网页添加水印插件

111 lines (94 loc) 4.14 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* * @Author: Leeking * @Date: 2023-09-15 11:36:39 */ var watermarkMap = new Map(); var maskClassName = 'watermark-23452384164-123412416'; var Watermark = function () { _createClass(Watermark, null, [{ key: 'mark', // 获取水印实例 value: function mark() { var text = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '我是水印'; var el = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body; var $el = el; // 设置定义水印的容器 if (typeof $el === 'string') { $el = document.querySelector($el) || document.body; } // 判断是否新建实例 var instance = null; if (watermarkMap.has($el)) { instance = watermarkMap.get($el); instance.reMark(text, $el); } else { instance = new Watermark($el, text); watermarkMap.set($el, instance); } return instance; } // 构造函数 }]); function Watermark($el, text) { _classCallCheck(this, Watermark); var maskDom = document.createElement('div'); maskDom.className = maskClassName; var width = maskDom.tagName === 'BODY' ? document.documentElement.clientWidth : $el.clientWidth; var height = maskDom.tagName === 'BODY' ? document.documentElement.clientHeight : $el.clientHeight; maskDom.style.cssText = '\n pointer-events: none;\n top: 0px;\n left: 0px;\n position: fixed;\n z-index: 100000000;\n width: ' + width + 'px;\n height: ' + height + 'px;\n background: url(' + this.generateWatermarkImg(text) + ') left top repeat;\n '; $el.appendChild(maskDom); this.$maskDom = maskDom; } // 生产水印图片 _createClass(Watermark, [{ key: 'generateWatermarkImg', value: function generateWatermarkImg(text) { // 创建一个画布 var can = document.createElement('canvas'); can.width = 250; can.height = 150; // 绘制图像 var cans = can.getContext('2d'); cans.rotate(-18 * Math.PI / 180); // 旋转角度 cans.font = '16px Vedana'; cans.fillStyle = 'rgba(220, 220, 220, 0.30)'; cans.textAlign = 'left'; // 设置文本内容的当前对齐方式 cans.textBaseline = 'Middle'; // 设置在绘制文本时使用的当前文本基线 cans.fillText(text, can.width / 8, can.height / 2); // 在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置) // 生产图片 return can.toDataURL('image/png'); } // 重新绘制水印内容 }, { key: 'reMark', value: function reMark(text) { if (this.$maskDom) { this.$maskDom.style.background = 'url(' + this.generateWatermarkImg(text) + ') left top repeat'; return true; } return false; } // 删除水印 }, { key: 'removeMark', value: function removeMark() { var $el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.body; if (this.$maskDom) { $el.removeChild(this.$maskDom); if (watermarkMap.has($el)) { watermarkMap.delete($el); } return true; } return false; } }]); return Watermark; }(); exports.default = Watermark;