前端页面填加水印方案及实现

直接可以拷过去用,或者自己封装成watermark.js;

var watermark = {}

function setWatermark(args) {
    console.log(...arguments)
	//声明一个变量,确保id的唯一性
    var id = '2019-0419-FTLC-ABCE';
    var xIndex = 15;//绘制文本的 x 坐标位置
    var yIndex = 65;//绘制文本的 y 坐标位置
    var xInterval = 25//有多个参数时的行间间隔
    if (document.getElementById(id) !== null) {
        document.body.removeChild(document.getElementById(id));
    }
	//利用canvas绘制水印信息
    var can = document.createElement('canvas');
    can.width = 250;
    can.height = 150;
    var cans = can.getContext('2d');
    cans.rotate(-20 * Math.PI / 180);
    cans.font = '17px Vedana';
    cans.fillStyle = 'rgba(200, 200, 200, 0.30)';
    cans.textAlign = 'left';
    cans.textBaseline = 'Middle';
    for(let i = 0;i<args.length;i++){
    	cans.fillText(args[i], xIndex , yIndex); //绘制水印文案
    	yIndex+=xInterval ;//设置每行间隔
    	xIndex+=xInterval ;//设置每列间隔
    }
    //创建div用于显示
    var div = document.createElement('div');
    div.id = id;
    div.style.pointerEvents = 'none';
    div.style.top = '70px';
    div.style.left = '90px';
    div.style.position = 'fixed';
    div.style.zIndex = '100000';
    div.style.width = document.documentElement.clientWidth - 50 + 'px';
    div.style.height = document.documentElement.clientHeight - 50 + 'px';
    //div承载水印显示
    div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
    document.body.appendChild(div);
    return id;
}

function createObserver(id,args){
    // 创建一个观察器实例并传入回调函数
    // var mObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
    var observer = new MutationObserver(()=>{
            if (document.getElementById(id) === null) {
                id = setWatermark(args);
            }
        });

    var option = {
        'childList': true,//子元素的变动
        'subtree': true//所有下属节点(包括子节点和子节点的子节点)的变动
    };

    observer.observe(document.body, option);//观察body下节点的变化
}

watermark.set = function(){
	let args = Array.prototype.slice.apply(arguments);
    let id = setWatermark(args);

    // 创建观察器检测如果水印被去掉了,自动给加上
    createObserver(id,args);

    //在窗口大小改变之后,自动触发加水印事件
    window.onresize = function(){
        setWatermark(args);
    }
}

window.watermark = watermark;

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值