由于开发需求需要在附件查看页面添加水印,于是网上看到一位大牛写了一个js加水印的方法觉得很实用,也很方便,记录一下,哈哈
大牛的博客链接:https://www.cnblogs.com/daixinyu/p/6715398.html 提供给大家学习
我优化了几点
1,我把水印的样式单独提出来,这样会提高渲染水印的性能
2,他是给整个页面添加水印,我修改一下是给需要添加水印的容器来加水印
- function watermark(settings) {
- //默认设置
- var defaultSettings={
- watermark_txt:"text",
- watermark_x:20,//水印起始位置x轴坐标
- watermark_y:20,//水印起始位置Y轴坐标
- watermark_rows:20,//水印行数
- watermark_cols:20,//水印列数
- watermark_x_space:100,//水印x轴间隔
- watermark_y_space:50,//水印y轴间隔
- watermark_width:210,//水印宽度
- watermark_height:80,//水印长度
- };
- //采用配置项替换默认值,作用类似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];
- }
- }
- // 获取需要添加水印的容器
- var box = document.getElementById("box");
- // 创建水印容器 mark-box
- var markBox= document.createElement('div');
- markBox.className="mark-box";
- //获取容器宽度
- var page_width = box.offsetWidth;
- //获取页面最大高度
- var page_height = box.offsetHeight;
- //如果将水印列数设置为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');
- mask_div.id = 'mask_div' + i + j;
- mask_div.className = 'mask_div';
- mask_div.appendChild(document.createTextNode(defaultSettings.watermark_txt));
- //给水印定位
- mask_div.style.left = x + 'px';
- mask_div.style.top = y + 'px';
- markBox.appendChild(mask_div);
- };
- };
- box.appendChild(markBox);
- }
下面是水印样式
- .mask_div {
- position: absolute;
- overflow: hidden;
- z-index: 9999;
- opacity: 0.2;
- pointer-events: none;
- filter: alpha(opacity=20);
- font-size: 18px;
- font-family: 微软雅黑;
- color: rgb(170, 170, 170);
- text-align: center;
- width: 210px;
- height: 80px;
- display: block;
- -webkit-transform: rotate(-15deg);
- -moz-transform: rotate(-15deg);
- -ms-transform: rotate(-15deg);
- -o-transform: rotate(-15deg);
- transform: rotate(-15deg);
- }
调用方法watermark({options})
由于开发需求需要在附件查看页面添加水印,于是网上看到一位大牛写了一个js加水印的方法觉得很实用,也很方便,记录一下,哈哈的更多相关文章
- 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...
- 小程序页面的四种文件(JSON、WXML、WXSS、JS)加载顺序
一个小程序页面由四种文件组成: 1)json 页面配置文件 2)js 页面逻辑文件(必需) 3)wxml 页面结构文件(必需) 4)wxss 页面样式文件 这四个文件的加载顺序: 第一步: 加载页面j ...
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
- 用vuex写了一个购物车H5页面的示例代码
用vuex写了一个购物车H5页面的示例代码:https://www.jb51.net/article/152008.htm 通过购物车的一个案列,把vuex学习了一篇. vuex概念浅谈 Vuex 是 ...
- 基于EasyNVR+EasyDSS H5视频直播二次开发实现业务需求:直接使用播放页面
之前的"网页直播.微信直播技术解决方案:EasyNVR与EasyDSS流媒体服务器组合之区分不同场景下的easynvr"有介绍一些功能.由于客户需求,我们定制一下功能.给该套方案添 ...
- SNF开发平台WinForm之一-开发-单表表格编辑管理页面-SNF快速开发平台3.3-Spring.Net.Framework
1.1运行效果: 1.2开发实现: 1.2.1 首先在数据库中创建需要开发的数据表,在代码生成器中进行配置连接数据库. 代码生成器的Config.xml文件配置如下节点: 1.2.2 ...
- Windows Phone 8初学者开发—第18部分:在页面间导航
原文 Windows Phone 8初学者开发—第18部分:在页面间导航 原文地址: http://channel9.msdn.com/Series/Windows-Phone-8-Developm ...
- SNF快速开发平台3.0之BS页面展示和九大优点-部分页面显示效果-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
一)经过多年的实践不断优化.精心维护.运行稳定.功能完善: 能经得起不同实施策略下客户的折腾,能满足各种情况下客户的复杂需求. 二)编码实现简单易懂.符合设计模式等理念: 上手快,见效快.方便维护,能 ...
- 微信小程序tips集合:无法输入文字/随时查看页面/元素审查/点击事件/数据绑定
1:编辑文档无法输入文字 出现这种情况一般是因为之前编辑的文档未保存,所有在其他文档输入的时候会自动输入到未保存的文档中,在文档暂时编辑完毕后要ctrl+s随手保存,不然会出现无法打字情况 2: 随时 ...
随机推荐
- intellij idea Entity类报错“Cannot resolve table”
https://blog.csdn.net/u014290233/article/details/54311954 转载,以便下次查看
- Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)
在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...
- 设置centos7.3的YUM源为国内阿里云源
CentOS系统更换软件安装源 第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cent ...
- BZOJ4162:shlw loves matrix II
传送门 利用Cayley-Hamilton定理,用插值法求出特征多项式 \(P(x)\) 然后 \(M^n\equiv M^n(mod~P(x))(mod~P(x))\) 然后就多项式快速幂+取模 最 ...
- 神奇的AC
- 关于java赋值运算的一个小例子
直接贴代码,这个也是做题目中遇见的,觉得很好奇,查了一波,然后自己编写代码看了一下,果真如此,哈哈哈...... public class 关于Boolean的赋值运算 { public static ...
- C++学习笔记(2)----模板
1. 与其他任何类相同,我们既可以在类模板内部,也可以在类模板外部为其定义成员函数,且定义在类模板内的成员函数被隐式声明为内联函数. 2. 默认情况下,对于一个实例化了的类模板,其成员只有在使用时才被 ...
- 如何激活 Trend Micro Deep Security Agent
Deep Security 即服务包括反恶意软件保护.防火墙.入侵防御系统和完整性监视.Trend Micro Deep Security Agent (DSA) 可以配合 Deep Security ...
- C# Array类的Sort()方法
Array类实现了数组中元素的冒泡排序.Sort()方法要求数组中的元素实现IComparable接口.如System.Int32 和System.String实现了IComparable接口,所以下 ...
- MHA源码分析——环境部署
为了更好地了解MHA的原理,计划对MHA源码进行详细的阅读,本文主要为部署源码阅读环境. 一.概述 mha是由perl语言开发,这里想通过eclipse+perl组件来阅读其源码,所以我们环境需要安装 ...