Code Monkey home page Code Monkey logo

saucxs / watermark-dom Goto Github PK

View Code? Open in Web Editor NEW
1.3K 20.0 340.0 514 KB

watermark.js是基于DOM对象实现的BS系统的水印,确保系统保密性,安全性,降低数据泄密风险,简单轻量,支持多属性配置,动态计算水印,水印防被删(监听水印组件元素删除并重新添加,监听改变水印的属性并重新添加)。1、支持2种方式导入使用,2、水印插件-testTool(测试工具),3、内置3种全局API方法,等等。欢迎访问:

Home Page: http://www.chengxinsong.cn/home

License: MIT License

JavaScript 100.00%
watermark watermark-dom

watermark-dom's Introduction

GitHub license GitHub version GitHub stars GitHub forks GitHub issues npm download HitCount

watermark.js是基于DOM对象实现的BS系统的水印,确保系统保密性,安全性,降低数据泄密风险,简单轻量,支持多属性配置,动态计算水印,水印防被删(监听水印组件元素删除并重新添加,监听改变水印的属性并重新添加)。

特性:

  • 多属性配置,简单易上手
  • 动态计算水印
  • 水印防被删(监听水印组件元素删除并重新添加,监听改变水印的属性并重新添加)
  • 支持2种导入使用:本地引用,npm引用
  • 水印测试工具:testTool工具
  • 内置3种全局API方法:init(),load(), remove()。
  • 原理:pointer-events事件穿透属性,Shadow DOM(影子DOM),opacity等

注意:基于本项目源码从事科研、论文、系统开发,"最好"在文中或系统中表明来自于本项目的内容和创意,否则所有贡献者可能会鄙视你和你的项目。 使用本项目源码请尊重程序员职业和劳动

1、版本及功能

  • 版本v 2.3.0 更新时间:2019.12.14

    • 新增功能:监听前端页面手动删除水印挂载的父元素,或删除影子DOM里的单个水印,当删除时会自动添加新水印。
  • 版本v 2.2.2 更新时间:2019.12.11

    • 优化:水印图层会撑开页面高度的问题。
  • 版本v 2.2.1 更新时间:2019.11.19

  • 版本v 2.2.0 更新时间:2019.11.11

  • 版本v 2.1.1 更新时间:2019.11.02

  • 版本v 2.1.0 更新时间:2019.08.16

    • 新增支持滚屏,谢谢ishwy提出。
    • 解决缩放存在水印消失的问题,谢谢wangmeng1991指出。
    • 解决loadMark多次调用时defaultSettings变量的复用问题,谢谢shellphon指出。
  • 版本v 2.0.3 更新时间:2019.06.18

    • 发布最新npm包npm i watermark-dom @2.0.3,支持方法:init(), load(), remove(),放心使用
  • 版本v 2.0.2 更新时间:2019.06.17

    • 作为更新npm包,出现的问题,请不要用这个版本的包
    • 发布到最新npm包,有问题,误用
  • 版本v 2.0.1 更新时间:2019.06.12

    • 1、支持移除水印方法remove()
    • 2、废弃生成水印的createShadowRoot方法,而使用attachShadow方法。(使用上没有影响,因为最初设计时候做了兼容处理)
    • 3、未发布到最新npm包
  • 版本v 2.0.0

    • 1、支持AMD,CommonJs,ES6 module模块规范;
    • 2、支持浏览器:Chrome,Firefox,Safari,IE9及以上;
    • 3、未发布到最新npm包
  • 版本v 1.0.0

    • 1、支持文本水印;
    • 2、支持本地js,支持npm包;
    • 2、支持浏览器:Chrome,Firefox,Safari;
    • 3、支持api

2、水印插件-使用

2.1 本地引入封装的js文件

只是简单的加一个很浅的水印,实现起来很容易。不需要引入jquery插件。

watermark.js是必须要引进的组件

第一步:获取组件方式:git clone https://github.com/saucxs/watermark-dom.git

第二步:clone后,在需要加水印的相关页面引入水印文件"watermark.js":

<script type="text/javascript" src="./watermark.js"></script>

第三步:在确保页面DOM加载完毕之后,调用watermark的load方法(手动加载):

   <script>watermark.load({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" })</script>

注意:我们提供了init方法,用来初始化水印,添加load和resize事件

   <script>watermark.init({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" })</script>

使用插件的效果地址1:http://www.chengxinsong.cn

Sample One:https://www.mwcxs.top/static/testTool/examples/examples-simple/index.html

Sample Two:https://www.mwcxs.top/static/testTool/examples/examples-setInterval/demo.html

image

2.2 npm包引入

第一步:npm获取水印组件包:

npm install watermark-dom

第二步:引入水印模块:

import watermark from 'watermark-dom'
或者
var watermarkDom = require("watermark-dom")

第三步:在确保页面DOM加载完毕之后,调用watermark的load方法(手动加载):

   <script>watermark.load({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" })</script>

注意:(1)我们提供了init方法,用来初始化水印,添加load和resize事件

   <script>watermark.init({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" })</script>

注意:(2)我们提供了remove方法,用来移除水印

   <script>watermark.remove({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" })</script>

3、水印插件-testTool(测试工具)

查看地址:https://www.mwcxs.top/static/testTool/index.html

看到水印插件-测试demo的效果 image

4、内置方法

4.1 watermark.init(setting);

初始化水印,添加load和resize事件

例子

watermark.init({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" });

4.2 watermark.load(setting);

手动加载水印

例子

watermark.load({ watermark_txt: "测试水印,1021002301,测试水印,100101010111101" });

4.3 watermark.remove();

手动移除水印

例子

watermark.remove();

5、支持各种属性配置使用

watermark_id: 'wm_div_id',          //水印总体的id
watermark_prefix: 'mask_div_id',    //小水印的id前缀
watermark_txt:"测试水印",             //水印的内容
watermark_x:20,                     //水印起始位置x轴坐标
watermark_y:20,                     //水印起始位置Y轴坐标
watermark_rows:0,                   //水印行数
watermark_cols:0,                   //水印列数
watermark_x_space:100,              //水印x轴间隔
watermark_y_space:50,               //水印y轴间隔
watermark_font:'微软雅黑',           //水印字体
watermark_color:'black',            //水印字体颜色
watermark_fontsize:'18px',          //水印字体大小
watermark_alpha:0.15,               //水印透明度,要求设置在大于等于0.005
watermark_width:100,                //水印宽度
watermark_height:100,               //水印长度
watermark_angle:15,                 //水印倾斜度数
watermark_parent_width:0,      //水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值)
watermark_parent_height:0,     //水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值)
watermark_parent_node:null     //水印插件挂载的父元素element,不输入则默认挂在body上

上面的属性都支持配置的,怎么使用呢?

基本山需要自己配置的属性:watermark_txt,watermark_color,watermark_fontsize,watermark_alpha,watermark_anglewatermark_width,watermark_height这7个属性一般是经常用到的,其他属性一般用的偏少。需要用到的就设置一下,不需要用到的就可以不设置,插件内部会有默认值的。

比如load方法的属性配置

 watermark.load({ 
    watermark_txt:"测试水印,saucxs,测试水印,songEagle,工号等",  //水印的内容
    watermark_color:'#5579ee',            //水印字体颜色
    watermark_fontsize:'24px',          //水印字体大小
    watermark_alpha:0.5,               //水印透明度,要求设置在大于等于0.005
    watermark_angle:135,                 //水印倾斜度数
    watermark_width:200,                //水印宽度
    watermark_height:200,               //水印长度
});

所以一般先在watermark-dom的测试工具上,把需要配置的属性值,调试好之后在写入代码中,这样效率更高。

6、API介绍

格式:[请求类型:]URL地址

例如:

 get:/api/watermark    //获取水印参数
 post:/api/watermark   //发布水印参数
 put:/api/watermark    //更新水印参数
 delete:/api/watermark   //删除水印参数

PS:如果没有添加请求类型的话,默认为get请求。

返回结果定义:

返回结果根据不同的状态需要定义,返回结果<<<标识,例如:

<<<
success
{
    "errNum":0,
    "retMsg":"success",
    "retData":{
          "watermark_txt":"测试水印",
          "watermark_x":20,//水印起始位置x轴坐标
          "watermark_y":20,//水印起始位置Y轴坐标
          "watermark_rows":0,//水印行数
          "watermark_cols":0,//水印列数
          "watermark_x_space":100,//水印x轴间隔
          "watermark_y_space":50,//水印y轴间隔
          "watermark_font":'微软雅黑',//水印字体
          "watermark_color":'black',//水印字体颜色
          "watermark_fontsize":'18px',//水印字体大小
          "watermark_alpha":0.15,//水印透明度,要求设置在大于等于0.003
          "watermark_width":150,//水印宽度
          "watermark_height":100,//水印长度
          "watermark_angle":15,//水印倾斜度数
    }
}
<<<
error
{
    "errNum":0,
    "retMsg":"success",
    "retData":[]
}

7、支持浏览器

Chrome,FireFox,Safari,IE9及以上浏览器

8、其他

欢迎使用watermark-dom插件,功能:给B/S网站系统加一个很浅的dom水印插件。

欢迎使用captcha-mini插件,功能:生成验证码的插件,使用js和canvas生成的

欢迎使用watermark-image插件,目前功能:图片打马赛克

一些使用文章介绍:

【1】https://juejin.im/post/5cb686f451882532c1535199

【2】http://www.chengxinsong.cn/post/34

感谢支持

1、作者常用昵称有saucxs,songEagle,松宝写代码。「松宝写代码」公众号作者,每日一题,实验室等。一个爱好折腾,致力于全栈,正在努力成长的字节跳动工程师,星辰大海,未来可期。内推字节跳动各个部门各个岗位。

松宝写代码

2、长按下面图片,关注「松宝写代码」,是获取开发知识体系构建,精选文章,项目实战,实验室,每日一道面试题,进阶学习,内推字节跳动,思考职业发展,涉及到JavaScript,Node,Vue,React,浏览器,http,算法,端相关,小程序等领域,希望可以帮助到你,我们一起成长~

松宝写代码

字节内推福利

公众号后台回复

  • 回复「校招」获取内推码
  • 回复「社招」获取内推
  • 回复「实习生」获取内推

后续会有更多福利

学习资料福利

回复「算法」获取算法学习资料

往期🔥「每日一题」🔥

持续更新中~

每日一题Github地址:https://github.com/saucxs/full_stack_knowledge_list

1、JavaScript && ES6

2、浏览器

3、Vue

4、HTML5

5、算法

6、Node

7、Http

watermark-dom's People

Contributors

bestdi avatar chaorenzeng avatar cxsagmw avatar kunl avatar saucxs avatar sunny19990108 avatar xiao-po avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

watermark-dom's Issues

z-index不能自己设置,init方法中的监听窗口大小变化的方法在某些场景不适用

1.z-index在使用iview的时候,弹窗的z-index是1000开始,水印默认写死了99999,会造成弹窗时候,水印层显示在弹窗遮罩层上方的问题。
2.如果在a页面设置了局部水印,使用了init方法,此时就加上了窗口大小的监听,但是我跳转到B页面,不使用水印,如果此时再去变化窗口大小,就会导致B页面出现默认挂载在body下的测试水印。需要在监听方法那写一个if,判断是否找的到水印id的div,找的到再去执行重新生成水印的方法。

水印可以被隐藏

生成的水印都带有一个 id,虽然不能在元素本身上修改样式,但因为这个 id,就可以另外写新样式,然后水印会消失。

watermark-dom

【npm包版本】更新列表

  • 版本v 2.3.0 更新时间:2019.12.14

    • 新增功能:监听前端页面手动删除水印挂载的父元素,或删除影子DOM里的单个水印,当删除时会自动添加新水印。
  • 版本v 2.2.2 更新时间:2019.12.11

    • 优化:水印图层会撑开页面高度的问题。
  • 版本v 2.2.1 更新时间:2019.11.19

  • 版本v 2.2.0 更新时间:2019.11.11

  • 版本v 2.1.1 更新时间:2019.11.02

  • 版本v 2.1.0 更新时间:2019.08.16

    • 新增支持滚屏,谢谢ishwy提出。
    • 解决缩放存在水印消失的问题,谢谢wangmeng1991指出。
    • 解决loadMark多次调用时defaultSettings变量的复用问题,谢谢shellphon指出。
  • 版本v 2.0.3 更新时间:2019.06.18

    • 发布最新npm包npm i watermark-dom @2.0.3,支持方法:init(), load(), remove(),放心使用
  • 版本v 2.0.2 更新时间:2019.06.17

    • 作为更新npm包,出现的问题,请不要用这个版本的包
    • 发布到最新npm包,有问题,误用
  • 版本v 2.0.1 更新时间:2019.06.12

    • 1、支持移除水印方法remove()
    • 2、废弃生成水印的createShadowRoot方法,而使用attachShadow方法。(使用上没有影响,因为最初设计时候做了兼容处理)
    • 3、未发布到最新npm包
  • 版本v 2.0.0

    • 1、支持AMD,CommonJs,ES6 module模块规范;
    • 2、支持浏览器:Chrome,Firefox,Safari,IE9及以上;
    • 3、未发布到最新npm包
  • 版本v 1.0.0

    • 1、支持文本水印;
    • 2、支持本地js,支持npm包;
    • 2、支持浏览器:Chrome,Firefox,Safari;
    • 3、支持api

watermark_parent_node问题?

针对页面可能涉及多个watermark_parent_node(相当于给个id,模块加载情况)
问题:只能加载一个模块,只执行一次。
求解决:类似轮播这种,需要给每个页面的某一模块加上水印,但是此代码,只能找到第一个id,并不能每个页面都可以加上水印,求解决 啊,大佬们

loadMark多次调用时defaultSettings变量的复用问题

看了源码,loadMark是水印产生的主要逻辑,resize等事件会多次调用loadMark,而loadMark里对于defaultSettings的使用有点问题,https://github.com/saucxs/watermark-dom/blob/master/watermark.js#L134~L142 当多次调用loadMark时,实际上后一次的计算处理拿到的一些关键值不再是一开始声明的初始化值,这将导致resize触发后,一些变量计算不再准确,甚至出现NaN的情况,demo里也可以发现问题,在页面最大化到变回小窗口时,水印有丢失的情况(计算错误导致)

页面有滚动条问题

当页面有滚动条的时候,发现水印下方无法显示,我觉得应该使用fixed定位。

请问如何给导出的excel添加水印

目前项目使用js-xlsx插件,导出页面table表格到本地excel文件中。
请问如果想给下载的excel也添加上水印,该插件是否有解决方案呢?

createShadowRoot 方法在浏览器中有warning

[Deprecation] Element.createShadowRoot is deprecated and will be removed in M73, around March 2019. Please use Element.attachShadow instead.

这个插件用了 createShadowRoot 方法来添加 shadowdom 这个方法现在快要过期了,希望更新一下方法

3Q

水印显示不全

水印显示不全,页面右侧和下侧会留一部分空白,并不会填满

watermark_parent_node不管用

挂载的父节点属性无作用,结果还是挂载到了body上面

系统:windows
浏览器:chrome
框架:react

ie 相关

请问 对ie 11以下 pointer-event属性不兼容的处理是在哪部分

调用remove方法不生效

image
原谅我们单位的代码荡不出来,只能放图,init生效了,但是remove不了,是我哪里写错了吗

水印图层会撑开页面高度

var page_height = Math.max(watermark_hook_element.scrollHeight,watermark_hook_element.clientHeight,document.documentElement.clientHeight);

这里获取的是页面最大高度,感觉应该是获取加水印容器的高度吧?为什么要加上 document.documentElement.clientHeight ?

shadowRoot' of null

image

watermark.init({
    watermark_id: "watermark_recommend_canvas_wrap", //水印总体的id
    watermark_prefix: "watermark_recommend_canvas_wrap", //小水印的id前缀
    watermark_alpha: 0.08,
    watermark_angle: 20,
    watermark_color: "#a0853c",
    watermark_cols: 0,
    watermark_fontsize: "18px",
    watermark_height: 112,
    watermark_rows: 0,
    watermark_txt: "测试",
    watermark_width: 200,
    watermark_x: 0,
    watermark_x_space: 30,
    watermark_y: 0,
    watermark_y_space: 40,
    watermark_parent_node: elId //水印插件挂载的父元素element,不输入则默认挂在body上
  });

iframe 无法显示水印

test code:

const ele: any = document.getElementsByClassName('window active')[0];
ele.requestFullscreen();

水印默认展示情况下,将 iframe 窗口全屏后,水印不显示,我根据示例中的 interval 方法也无法显示水印,恳请作者帮忙看下

vue版本需求

相当棒的水印应用,大神能做个vue版本吗?

watermark_parent_node定位问题

不知道我理解的对不对:

水印是相对于页面进行absolute定位计算top,left值

如果watermark_parent_node有定位,那水印的定位就会先对于parent偏移,可能导致水印从parent中跑出去了

那如果是这样的话,可以有两种方式处理:
1.文档中说明从watermark_parent_node到顶层body,所有dom不能定位
2.强制用户parentnode定位,然后修改水印x,y的计算逻辑,依附于parent

我这边出现这个问题,不知道是不是这个原因,求解答

ie11以下无法兼容

源代码中包含【const 】es6代码, MutationObserver不支持ie11以下浏览器 需判断

水印图层会撑开默认页面宽度

image

如图,由于第一行最后一个水印宽度超过页面最大宽度,导致会撑开出现水平滚动条。希望能优化当剩余宽度不够放下一个水印时,就换行。

感谢大佬

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.