<template>
<div id="app">
<router-view />
</div>
</template>
<script>
export default {
data() {
return {
waterMarkConfig: {
width: 340,
height: 240,
content: '这里是水印内容,可以是 git commit id 或 process.env.NODE_ENV',
font: '14px PingFang SC, sans-serif',
color: 'rgba(0, 0, 0, 0.05)',
rotate: -15, // 偏转角度(deg)
x: 0,
y: 100,
position: 'absolute',
top: 0,
left: 0,
zIndex: 1000,
className: '#app:after',
},
};
},
methods: {
createWaterMarkImage() {
let self = this;
const canvas = document.createElement('canvas');
const text = self.waterMarkConfig.content;
canvas.width = self.waterMarkConfig.width;
canvas.height = self.waterMarkConfig.height;
const ctx = canvas.getContext('2d');
if (ctx) {
ctx.shadowOffsetX = 2; // X轴阴影距离,负值表示往上,正值表示往下
ctx.shadowOffsetY = 2; // Y轴阴影距离,负值表示往左,正值表示往右
ctx.shadowBlur = 2; // 阴影的模糊程度
ctx.font = self.waterMarkConfig.font;
ctx.fillStyle = self.waterMarkConfig.color;
ctx.rotate((self.waterMarkConfig.rotate * Math.PI) / 180);
ctx.textAlign = 'left';
ctx.fillText(text, self.waterMarkConfig.x, self.waterMarkConfig.y);
}
return canvas.toDataURL('image/png');
},
genWaterMark() {
let self = this;
const dataUri = self.createWaterMarkImage(self.waterMarkConfig);
let styleEl = document.createElement('style');
styleEl.innerHTML = `${self.waterMarkConfig.className} {
content: '';
display: block;
width: 100%;
height: 100%;
pointer-events: none;
background-repeat: repeat;
background-attachment: fixed;
background-image: url(${dataUri});
background-size: ${self.waterMarkConfig.width}px ${self.waterMarkConfig.height}px;
${self.waterMarkConfig.position ? `position: ${self.waterMarkConfig.position}` : ''};
${self.waterMarkConfig.zIndex ? `z-index:${self.waterMarkConfig.zIndex}` : ''};
${self.waterMarkConfig.top || self.waterMarkConfig.top === 0 ? `top: ${self.waterMarkConfig.top}px;` : ''}
${self.waterMarkConfig.left || self.waterMarkConfig.left === 0 ? `left: ${self.waterMarkConfig.left}px;` : ''}
}`;
document.head.appendChild(styleEl);
},
},
created() {
let self = this;
if (process.env.NODE_ENV !== 'production') {
self.genWaterMark();
}
},
};
</script>
参考自:https://juejin.cn/post/6946139702684549157