vue 页面添加水印并在浏览器不能去除

这篇博客介绍了一个JavaScript实现网页水印的方案。通过创建canvas元素,绘制文本和图片,然后将其作为背景平铺在页面上,确保水印始终可见。同时,提供了隐藏水印的方法,以及在页面加载和窗口大小改变时自动调整水印的机制。
摘要由CSDN通过智能技术生成

创建watermark.js文件

let watermark = {}

let setWatermark = (str) => {
    let id = '1.23452384164.123412416';

    if (document.getElementById(id) !== null) {
        document.body.removeChild(document.getElementById(id));
    }

    // 创建一个画布
    let can = document.createElement('canvas');
    // 设置画布的长宽
    can.width = 320;
    can.height = 200;

    let cans = can.getContext('2d');
    // 旋转角度
    cans.rotate(-15 * Math.PI / 180);
    cans.font = '0.72912vw Vedana';
    // 设置填充绘画的颜色、渐变或者模式
    cans.fillStyle = 'rgba(200, 200, 200, 0.40)';
    // 设置文本内容的当前对齐方式
    cans.textAlign = 'left';
    // 设置在绘制文本时使用的当前文本基线
    cans.textBaseline = 'Middle';

    // 在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置)
    cans.fillText(str.name + '  账号:' + str.phone, 30, 105);
    cans.font = '0.46872vw Vedana';
    cans.fillText(str.company, 30, 85);
    cans.font = '0.85496vw Vedana';
    cans.fillText("链祺通平台", 80, 55);

    // 绘制logo
    var img = document.getElementById("imgUrl");
    cans.drawImage(img, 30, 30, 40, 40);

    cans.font = '0.62496vw Vedana';
    var div = document.createElement('div');
    div.id = id;
    div.style.pointerEvents = 'none';
    div.style.top = '5.2vw';
    div.style.left = '23.436vw';
    div.style.position = 'fixed';
    div.style.zIndex = '99999999999999';
    div.style.width = '52vw';
    div.style.height = '79.52616vw';
    div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
    document.body.appendChild(div);
    setTimeout(() => {
        // 防止用户在控制台修改删除水印
        let body = document.getElementsByTagName('body')[0]
        let options = {
            childList: true,
            attributes: true,
            characterData: true,
            subtree: true,
            attributeOldValue: true,
            characterDataOldValue: true
        }
        let observer = new MutationObserver(() => {
            div.id = id;
            div.style.pointerEvents = 'none';
            div.style.top = '5.2vw';
            div.style.left = '23.436vw';
            div.style.position = 'fixed';
            div.style.zIndex = '99999999999999';
            div.style.width = '52vw';
            div.style.height = '79.52616vw';
            div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
            observer.disconnect();
            observer.observe(body, options)
            return false
        })
        observer.observe(body, options) // 监听body节点
    }, 1000);  // 防止在页面未渲染完成的时候找不到页面id
    return id;
}

// 添加水印该方法只允许调用一次
watermark.set = (str) => {
    let id = setWatermark(str);
    setInterval(() => {
        if (document.getElementById(id) === null) {
            id = setWatermark(str);
        }
    }, 500);
    window.onresize = () => {
        setWatermark(str);
    };
}

const outWatermark = (id) => {
    if (document.getElementById(id) !== null) {
        const div = document.getElementById(id)
        div.style.display = 'none'
    }
}

watermark.out = () => {
    const str = '1.23452384164.123412416'
    outWatermark(str)
    // 去除水印
}
export default watermark;

页面调用

 var str = {
          name: "水印内容",  // 
          phone: "水印内容",
          company: "水印内容"
        }
        Watermark.set(str)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值