最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端页面填加水印方案及实现

    正文概述 掘金(random__)   2021-04-06   600

    一、背景

    最近有个项目需要在页面上加上水印。这里尝试了一个实现方案。

    二、实现

    1.利用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';
        // ziti yanse
        cans.fillStyle = 'rgba(200, 200, 200, 0.30)';
        cans.textAlign = 'left';
        cans.textBaseline = 'Middle';
        cans.fillText("水印数据", xIndex , yIndex); //绘制水印文案
    }
    

    2.页面展示水印

    • 将图片转为dataURL(base64)
    canvas.toDataURL('image/png') 
    
    • 创建一个div用于展示
    var div = document.createElement('div');
    div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat';
    

    left top repeat属性表示背景图像将从left,top开始向垂直和水平方向重复。

    三、完整代码

    var watermark = {}
    
    function setWatermark(args) {
    	//声明一个怪异一点的变量,确保id的唯一性
        var id = '111.222.333.456';
        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';
        // ziti yanse
        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 ;//设置每行间隔
    }
    //创建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;
    }
    
    watermark.set = function(){
    	let args =Array.prototype.slice.apply(arguments);
        let id = setWatermark(args);
            // 检测如果水印被去掉了,自动给加上
        setInterval(function(){
            if (document.getElementById(id) === null) {
                id = setWatermark(args);
            }
        }, 500)
        //在窗口大小改变之后,自动触发加水印事件
        window.onresize = function(){
            setWatermark(args);
        }
    }
    window.watermark = watermark;
    

    四、调用

    • 将代码写到watermark.js文件里,
    • 再引入
    • 调用
    watermark.set("水印信息1","我是水印信息2",...);
    

    支持多个参数,传多个参数时,将分行展示。 前端页面填加水印方案及实现

    <script src="/watermark.js"></script>
    
    ......
    
    <script>
    window.onload = function(){
      //添加水印
        watermark.set("水印数据");
    }
    </script>
    </body>
    

    当然,该方法也可以直接写在页面js里面。

    注意: 执行添加水印的操作尽量往后放,反正</body>标签之前就行, 防止DOM还没加载完的情况出现。

    五、验证

    打开一个页面,控制台执行代码

    1. 在window上添加绘制水印的方法
    2. 执行添加水印

    效果如图: 前端页面填加水印方案及实现


    起源地下载网 » 前端页面填加水印方案及实现

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元