zoukankan      html  css  js  c++  java
  • js实现前端水印功能

    (function(watermark) {
    	window.watermarkdivs = [];
    	// 加载水印
    	var loadMark = function(settings) {
    		var defaultSettings = {
    			watermark_txt: settings.watermark_txt ? settings.watermark_txt : '请输入自定义内容(50字以内)',
    			watermark_x: settings.watermark_x ? settings.watermark_x : 20, //水印起始位置x轴坐标
    			watermark_y: settings.watermark_y ? settings.watermark_y : 20, //水印起始位置Y轴坐标
    			watermark_rows: settings.watermark_rows ? settings.watermark_rows : 0, //水印行数
    			watermark_cols: settings.watermark_cols ? settings.watermark_cols : 0, //水印列数
    			watermark_x_space: settings.watermark_x_space ? settings.watermark_x_space : 50, //水印x轴间隔
    			watermark_y_space: settings.watermark_y_space ? settings.watermark_y_space : 50, //水印y轴间隔
    			watermark_color: settings.watermark_color ? settings.watermark_color : '#000000', //水印字体颜色
    			watermark_alpha: settings.watermark_alpha ? settings.watermark_alpha : 0.05, //水印透明度,要求设置在大于等于0.005
    			watermark_fontsize: settings.watermark_fontsize ? settings.watermark_fontsize : '18px', //水印字体大小
    			watermark_font: settings.watermark_font ? settings.watermark_font : '宋体', //水印字体
    			watermark_ settings.watermark_width ? settings.watermark_width : 150, //水印宽度
    			watermark_height: settings.watermark_height ? settings.watermark_height : 100, //水印长度
    			watermark_angle: settings.watermark_angle ? settings.watermark_angle : 15, //水印倾斜度数
    			watermark_bg_alpha: settings.watermark_bg_alpha ? settings.watermark_bg_alpha : 0.5, //加透明度导致隐形水印无法读取
    		}
    		//采用配置项替换默认值,作用类似jquery.extend
    		if (arguments.length === 1 && typeof arguments[0] === "object") {
    			var src = arguments[0] || {};
    			for (key in src) {
    				if (src[key] && defaultSettings[key] && src[key] === defaultSettings[key])
    					continue;
    				else if (src[key])
    					defaultSettings[key] = src[key];
    			}
    		}
    
    		if (window.watermarkdivs && window.watermarkdivs.length > 0) {
    			document.body.removeChild(document.getElementById("otdivid"));
    			window.watermarkdivs = [];
    		}
    
    		//获取页面最大宽度
    		var page_width = Math.max(document.body.scrollWidth, document.body.clientWidth) - parseInt(defaultSettings.watermark_width / 2);
    		//获取页面最大长度
    		// var page_height = Math.max(document.body.scrollHeight,document.body.clientHeight);
    		// 当前获取某个需要水印区域的div的高度waterMarkImgAreaId为div的id
            var page_height = $("#waterMarkImgAreaId").outerHeight() - 10;
    
    		// 创建文档碎片
    		var oTemp = document.createDocumentFragment();
    		//创建水印外壳div
    		var otdiv = document.getElementById("otdivid");
    		if (!otdiv) {
    			otdiv = document.createElement('div');
    			otdiv.id = "otdivid";
    			otdiv.style.pointerEvents = "none";
    			document.body.appendChild(otdiv);
    		}
    
    		//如果将水印列数设置为0,或水印列数设置过大,超过页面最大宽度,则重新计算水印列数和水印x轴间隔
    		if (defaultSettings.watermark_cols == 0 || (parseInt(defaultSettings.watermark_x + defaultSettings.watermark_width * defaultSettings.watermark_cols + defaultSettings.watermark_x_space * (defaultSettings.watermark_cols - 1)) > page_width)) {
    			defaultSettings.watermark_cols = parseInt((page_width - defaultSettings.watermark_x + defaultSettings.watermark_x_space) / (defaultSettings.watermark_width + defaultSettings.watermark_x_space));
    			defaultSettings.watermark_x_space = parseInt((page_width - defaultSettings.watermark_x - defaultSettings.watermark_width * defaultSettings.watermark_cols) / (defaultSettings.watermark_cols - 1));
    		}
    		//如果将水印行数设置为0,或水印行数设置过大,超过页面最大长度,则重新计算水印行数和水印y轴间隔
    		if (defaultSettings.watermark_rows == 0 || (parseInt(defaultSettings.watermark_y + defaultSettings.watermark_height * defaultSettings.watermark_rows + defaultSettings.watermark_y_space * (defaultSettings.watermark_rows - 1)) > page_height)) {
    			defaultSettings.watermark_rows = parseInt((defaultSettings.watermark_y_space + page_height - defaultSettings.watermark_y) / (defaultSettings.watermark_height + defaultSettings.watermark_y_space));
    			defaultSettings.watermark_y_space = parseInt(((page_height - defaultSettings.watermark_y) - defaultSettings.watermark_height * defaultSettings.watermark_rows) / (defaultSettings.watermark_rows - 1));
    		}
    
    		var x;
    		var y;
    		for (var i = 0; i < defaultSettings.watermark_rows; i++) {
    			y = defaultSettings.watermark_y + (defaultSettings.watermark_y_space + defaultSettings.watermark_height) * i;
    			for (var j = 0; j < defaultSettings.watermark_cols; j++) {
    				x = defaultSettings.watermark_x + (defaultSettings.watermark_width + defaultSettings.watermark_x_space) * j;
    
    				var mask_div = document.createElement('div');
    				var oText = document.createTextNode(defaultSettings.watermark_txt);
    				mask_div.appendChild(oText);
    				// 设置一张水印相关属性start
    				mask_div.id = 'mask_div' + i + j;
    				//设置水印div倾斜显示
    				mask_div.style.webkitTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
    				mask_div.style.MozTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
    				mask_div.style.msTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
    				mask_div.style.OTransform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
    				mask_div.style.transform = "rotate(-" + defaultSettings.watermark_angle + "deg)";
    				mask_div.style.visibility = "";
    				mask_div.style.position = "absolute";
    				//选不中
    				mask_div.style.left = x + 'px';
    				mask_div.style.top = y + 'px';
    				mask_div.style.overflow = "hidden";
    				mask_div.style.zIndex = "9999";
    				mask_div.style.opacity = defaultSettings.watermark_alpha;
    				mask_div.style.fontSize = defaultSettings.watermark_fontsize;
    				mask_div.style.fontFamily = defaultSettings.watermark_font;
    				mask_div.style.color = defaultSettings.watermark_color;
    				mask_div.style.textAlign = "center";
    				mask_div.style.width = defaultSettings.watermark_width + 'px';
    				mask_div.style.height = defaultSettings.watermark_height + 'px';
    				mask_div.style.display = "block";
    				mask_div.style.wordWrap = "break-word";
    				//设置一张水印相关属性end
    				//附加到文档碎片中
    				otdiv.appendChild(mask_div);
                    //控制页面大小变化时水印字体
    				window.watermarkdivs.push(otdiv); 
    			};
    		};
    		//一次性添加到document中
    		document.body.appendChild(oTemp);
    	};
        // 水印加载事件
    	watermark.load = function(settings) {
    		loadMark(settings);
            // 监听load事件load 仅用于检测一个完全加载的页面,页面的html、css、js、图片等资源都已经加载完之后才会触发 load 事件
    		// window.addEventListener('load', function() {
    		//	loadMark(settings)
    		//})
            // 当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完成加载
    		//window.addEventListener('DOMContentLoaded', function() {
    		//	loadMark(settings)
    		//})
    	};
        // 水印移除事件
    	watermark.remove = function() {
    		removeMark();
    	}
        // 移除水印
    	var removeMark = function() {
    		if (window.watermarkdivs && window.watermarkdivs.length > 0) {
    			document.body.removeChild(document.getElementById('otdivid'))
    			window.watermarkdivs = []
    		}
    	}
    })(window.watermark = {});
    
  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/qqlike/p/14277667.html
Copyright © 2011-2022 走看看