解决你的水印烦恼

#基于PC端的项目全局水印处理方法  废话不多说,直接上代码

/*

 * 水印

 *

 * @Author:    前端小熊999

 * @Date:      2024-03-10 20:50:10

 * @Email:     1282414678@qq.com

 */

import dayjs from 'dayjs';

/**

 *  水印DOM id

 */

const WATER_MARK_DOM_ID = 'admin_water_mark';

let adminWaterMarkIntervalId = null;

/**

 *

 * 因为modal的z-index为1000,所以为了modal的黑色背景隐藏掉,z-index为 999

 *

 * @param id

 * @param str

 * @returns

 */

function setWatermark(id, str) {

    //删掉之前的水印

    if (document.getElementById(WATER_MARK_DOM_ID) !== null) {

        document.getElementById(WATER_MARK_DOM_ID).remove();

    }

    str = str + ' ' + dayjs().format('YYYY-MM-DD HH:mm');

    //创建一个画布

    const can = document.createElement('canvas');

    //设置画布的长宽

    can.width = 400;

    can.height = 200;

    const cans = can.getContext('2d');

    //旋转角度

    cans.rotate((-15 * Math.PI) / 150);

    cans.font = '16px Microsoft JhengHei';

    //设置填充绘画的颜色、渐变或者模式

    cans.fillStyle = 'rgba(190, 190, 190, 0.30)';

    //设置文本内容的当前对齐方式

    cans.textAlign = 'left';

    //设置在绘制文本时使用的当前文本基线

    cans.textBaseline = 'middle';

    //在画布上绘制填色的文本(输出的文本,开始绘制文本的X坐标位置,开始绘制文本的Y坐标位置)

    cans.fillText(str, can.width / 8, can.height / 2);

    const div = document.createElement('div');

    div.id = WATER_MARK_DOM_ID;

    div.style.pointerEvents = 'none';

    div.style.top = '0px';

    div.style.left = '0px';

    div.style.position = 'absolute';

    div.style.zIndex = '99';

    div.style.width = '100%';

    div.style.height = '100%';

    div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';

    if (document.getElementById(id)) {

        document.getElementById(id).appendChild(div);

    }

}

const watermark = {

    show: function () {

        document.getElementById(WATER_MARK_DOM_ID).style.display = 'block';

    },

    hide: function () {

        document.getElementById(WATER_MARK_DOM_ID).style.display = 'hide';

    },

    // 该方法只允许调用一次

    set: function (id, str) {

        // 如果存在水印,则不允许再调用了

        if (document.getElementById(WATER_MARK_DOM_ID) !== null) {

            return;

        }

        setWatermark(id, str);

        //每隔1分钟检查一次水印

        AdminWaterMarkIntervalId = setInterval(() => {

            setWatermark(id, str);

        }, 60000);

        window.onresize = () => {

            setWatermark(id, str);

        };

    },

    // 清空水印

    clear: function () {

        let watermarkDom = document.getElementById(WATER_MARK_DOM_ID);

        if (watermarkDom) {

            watermarkDom.remove();

        }

        window.removeEventListener('resize', setWatermark);

        if (adminWaterMarkIntervalId) {

            clearInterval(adminWaterMarkIntervalId);

            adminWaterMarkIntervalId = null;

        }

    },

};

export default watermark;

然后根据需要引入全局或者单页面使用都OK啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值