vue项目中添加全页水印

发布时间 2023-10-18 14:30:33作者: 世界的尽头就是打工人

先看代码

 1 /**  水印添加方法  */
 2 
 3 let setWatermark = (str1, str2) => {
 4     let id = '1.23452384164.123412415'
 5 
 6     if (document.getElementById(id) !== null) {
 7         document.body.removeChild(document.getElementById(id))
 8     }
 9 
10     let can = document.createElement('canvas')
11     // 设置canvas画布大小
12     can.width = 150
13     can.height = 80
14 
15     let cans = can.getContext('2d')
16     cans.rotate(-20 * Math.PI / 180) // 水印旋转角度
17     cans.font = '15px Vedana'
18     cans.fillStyle = '#666666'
19     cans.textAlign = 'center'
20     cans.textBaseline = 'Middle'
21     cans.fillText(str1, can.width / 2, can.height) // 水印在画布的位置x,y轴
22     cans.fillText(str2, can.width / 2, can.height + 22)
23 
24     let div = document.createElement('div')
25     div.id = id
26     div.style.pointerEvents = 'none'
27     div.style.top = '40px'
28     div.style.left = '0px'
29     div.style.opacity = '0.08'
30     div.style.position = 'fixed'
31     div.style.zIndex = '100000'
32     div.style.width = document.documentElement.clientWidth + 'px'
33     div.style.height = document.documentElement.clientHeight + 'px'
34     div.style.background = 'url(' + can.toDataURL('image/png') + ') left top repeat'
35     document.body.appendChild(div)
36     return id
37 }
38 
39 // 添加水印方法
40 export const setWaterMark = (str1, str2) => {
41     let id = setWatermark(str1, str2)
42     if (document.getElementById(id) === null) {
43         id = setWatermark(str1, str2)
44     }
45 }
46 
47 // 移除水印方法
48 export const removeWatermark = () => {
49     let id = '1.23452384164.123412415'
50     if (document.getElementById(id) !== null) {
51         document.body.removeChild(document.getElementById(id))
52     }
53 }

思路,在新增水印的时候,我们需要创建一个canvans画布,

在代码10行,可以看到创建了一个canvans对象并且设置画布大小,

后续将canvans对象设置为 '2d' 旋转角度以及画布内的文字格式、文字颜色、文字大小等并通过fillText属性来设置水印内容在画布的位置。

创建div对象,将画布与div绑定,并设置他的大小,层级以及定位位置等信息。

暴露出添加水印方法,并设置参数。

随后在App.vue中添加水印,调用添加水印方法,并传入第一行第二行的数据。