h5网页水印SDK的实现代码示例

在网站浏览中,常常需要网页水印,以便防止用户截图或录屏暴露敏感信息后,追踪用户来源。如我们常用的钉钉软件,聊天背景就会有你的名字。那么如何实现网页水印效果呢?

网页水印SDK,实现思路

1.能更具获取到的当前用户信息,如名字,昵称,ID等,生成图片水印
2.生成一个Canvas,覆盖整个窗口,并且不影响其他元素
3.可以修改字体间距,大小,颜色
4.不依赖Jquery
5.需要防止用户手动删除这个Canvas

实现分析

初始参数

?


1

2

3

4

5

6

7

size: 字体大小

color: 字体颜色

id: canvasId

text: 文本内容

density: 间距

clarity: 清晰度

supportTip: Canvas不支持的文字提示

生成Canvas

根据id生成Canvas,画布大小为window.screen大小,若存在原有老的Canvas,清除并重新生成。

画布固定定位在可视窗口,z-index为-1

?


1

2

3

4

let body = document.getElementsByTagName(‘body‘);

  let canvas = document.createElement(‘canvas‘);

  canvas.style.cssText= ‘position: fixed;width: 100%;height: 100%;left:0;top:0;z-index: -1;‘;

  body[0].appendChild(canvas);

指纹生成算法

?


1

2

3

4

5

6

7

8

9

10

11

12

13

let canvas = document.getElementById(this.params.id);

     let cxt = canvas.getContext(‘2d‘);

     let times = window.screen.width * this.params.clarity / this.params.density;//横向文字填充次数

     let heightTimes = window.screen.height * this.params.clarity * 1.5/ this.params.density; //纵向文字填充次数

     cxt.rotate(-15*Math.PI/180); //倾斜画布

  

     for(let i = 0; i < times; i++) {

       for(let j = 0; j < heightTimes; j++) {

         cxt.fillStyle = this.params.color;

         cxt.font = this.params.size + ‘ Arial‘;

         cxt.fillText(this.params.text, this.params.density*i, j*this.params.density);

       }

     }

防止用户删除

使用定时器,定时检查指纹是否存在

?


1

2

3

4

5

6

let self = this;

  window.setInterval(function(){

  if (!document.getElementById(self.params.id)) {

  self._init();

  }

  }, 1000);

项目编译

使用glup编译

?


1

2

3

4

5

6

7

8

9

var gulp = require(‘gulp‘),

      uglify = require("gulp-uglify"),

      babel = require("gulp-babel");

  gulp.task(‘minify‘, function () {

      return gulp.src(‘./src/index.js‘) // 要压缩的js文件

      .pipe(babel())

      .pipe(uglify())

      .pipe(gulp.dest(‘./dist‘)); //压缩后的路径

  });

原文地址:https://www.cnblogs.com/good10000/p/10583310.html

时间: 2024-10-20 17:12:16

h5网页水印SDK的实现代码示例的相关文章

IOS 支付宝、微信回调传值给H5网页

这里用是的苹果原生和JS的交互 .有不明白JavaScriptCore框架的可以去网上搜索下这方面的资料很多废话不多说直接上代码 @protocol JSContextDelegate <JSExport>//这里面写H5,也就是网页端定义的方法- (void)isLogin;//如判断用户有没有登录@end @interface HtmlShopingViewController ()< JSContextDelegate>@property (nonatomic, strong

Web前端设计:Html强制不换行&lt;nobr&gt;标签用法代码示例

在网页排版布局中比如文章列表标题排版,无论多少文字均不希望换行显示,需要强制在一行显示完内容.这就可以nobr标签来实现.它起到的作用与word-break:keep-all 是一样的.nobr 是 No Break 的缩写,意思是禁止换行.通常在浏览器上显示的文档会在到达浏览器的横幅底端时自动换行,但是如果文字被包含在<nobr>-</nobr>标签里的话,则不会换行.由www.169it.com搜集整理 一.nobr语法 1 <nobr>内容</nobr>

[IE编程] 多页面基于IE内核浏览器的代码示例

有不少人发信问这个问题,我把答案贴在这里: 建议参考 WTL (Windows Template Library) 的代码示例工程TabBrowser  (在WTL目录/Samples/TabBrowser 下面).该工程演示了如何用WTL + IE WebBrowser接口开发一个多Tab的IE内核浏览器, 并演示如何用ATL的IDispEventSimpleImpl监听DWebBrowserEvents2 事件, 代码简洁易懂,很有参考价值. WTL 是微软的开源项目,可以去 http://

英特尔&#174; 实感? 深度摄像头代码示例 – R200 摄像头数据流

英特尔开发人员专区原文地址 简介 该可下载代码示例展示了如何使用面向 Windows 的英特尔® 实感™ SDK* 捕捉和查看用 C#/XAML 编写的原始 R200 摄像头数据流. Visual Studio* 解决方法实际上包含四个简单项目(均不到 200 行代码): ColorStream – 显示 RGB 摄像头的色彩数据流 DepthStream – 显示深度数据流 IRStreams – 显示左右 IR 摄像头数据流 AllStreams – 在单个窗口中显示上述所有数据流(图 1)

借助全新 MATLAB&#174; 适配器代码示例读取英特尔&#174; 实感? 摄像头数据流

下载源代码请访问原文地址:借助全新 MATLAB® 适配器代码示例读取英特尔® 实感™ 摄像头数据流 简介 该可下载代码示例简要介绍了如何使用英特尔® 实感™ SDK 和 MATLAB 的图像采集工具箱适配器套件在 MATLAB® 工作区获取英特尔® 实感™ 摄像头(R200 和 F200)的原始摄像头数据流. 该示例代码支持 MATLAB 开发人员开发面向英特尔® 平台.并具备以下特性的英特尔® 实感™ 应用: 多数据流同步. 同时获取颜色数据流和景深数据流(见图 1). 多摄像头支持. 同时

android 三种网络通信接口及各个接口的代码示例

第一部分 Android网络基础 Android平台浏览器采用了WeBKit引擎,这款名为Chorme Lite的Web浏览器拥有强大扩展特性,每个开发者都以为编写自己的插件,使得浏览器的功能更加完善. 目前Android平台有3种网络接口. 第一种 java.net.*(标准java接口) 此接口提供与联网有关的类,包括流和数据包套接字.Internet协议.常见HTTP处理.如:创建URL以及URLConnection/HttpURLConnection对象.设置连接参数.连接服务器.向服务

计算DXFReader中多边形的面积代码示例

在DXFReader中, 一般的多边形的面积计算绝对值 其中K表是顶点的数目,它们的坐标,用于在求和和, 所以用下面的代码就可以计算出一个封闭的多段线的区域: view source print? 01 Dim Vertex As Object 02 Dim Entity As Object 03 Dim k As Long 04 Dim i As Long 05 Dim Area As Single 06 07 With DXFReader1 08 09  For Each Entity In

代码示例:一些简单技巧优化JavaScript编译器工作详解,让你写出高性能运行的更快JavaScript代码

告诉你一些简单的技巧来优化JavaScript编译器工作,从而让你的JavaScript代码运行的更快.尤其是在你游戏中发现帧率下降或是当垃圾回收器有大量的工作要完成的时候. 单一同态: 当你定义了一个两个参数的函数,编译器会接受你的定义,如果函数参数的类型.个数或者返回值的类型改变编译器的工作会变得艰难.通常情况下,单一同态的数据结构和个数相同的参数会让你的程序会更好的工作. function example(a, b) { // 期望a,b都为数值类型 console.log(++a * +

网页瀑布流布局jQuery实现代码

网页瀑布流布局jQuery实现代码 这篇文章主要为大家详细介绍了网页瀑布流布局jQuery实现方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 什么是瀑布流网页布局? 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 下面来看代码,用纯CSS3来做看效果怎样! HTML 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2