目录
1. 前言
在一些特殊的应用场景中,可能需要在网页上添加水印以保护版权或标识信息。本文将介绍如何在Vue项目中添加满屏水印并实现去除水印的功能。
2. 添加满屏水印
2.1 创建水印组件
首先,我们需要创建一个水印组件,该组件会在页面上生成一个满屏的水印。
<!-- Watermark.vue -->
<template>
<div class="watermark" ref="watermark"></div>
</template>
<script>
export default {
props: {
text: {
type: String,
required: true
}
},
mounted() {
this.addWatermark(this.text);
},
methods: {
addWatermark(text) {
const watermarkDiv = this.$refs.watermark;
const canvas = document.createElement('canvas');
canvas.width = 200;
canvas.height = 200;
const ctx = canvas.getContext('2d');
ctx.rotate(-20 * Math.PI / 180);
ctx.font = '20px Arial';
ctx.fillStyle = 'rgba(200, 200, 200, 0.50)';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(text, canvas.width / 2, canvas.height / 2);
watermarkDiv.style.backgroundImage = `url(${canvas.toDataURL('image/png')})`;
watermarkDiv.style.pointerEvents = 'none';
watermarkDiv.style.position = 'fixed';
watermarkDiv.style.top = 0;
watermarkDiv.style.left = 0;
watermarkDiv.style.width = '100%';
watermarkDiv.style.height = '100%';
watermarkDiv.style.zIndex = 9999;
}
}
};
</script>
<style scoped>
.watermark {
background-repeat: repeat;
}
</style>
2.2 在页面中使用水印组件
将水印组件引入到需要添加水印的页面,并在模板中使用。
<template>
<div>
<Watermark text="这是一个水印"></Watermark>
<!-- 你的其他页面内容 -->
</div>
</template>
<script>
import Watermark from './components/Watermark.vue';
export default {
components: {
Watermark
}
};
</script>
示例效果
3. 去除水印
为了去除水印,我们可以使用一个简单的方法来控制水印组件的显示和隐藏。
3.1 修改Watermark组件以支持动态显示
在水印组件中添加一个v-if
指令,以便动态控制其显示和隐藏。
<!-- Watermark.vue -->
<template>
<div class="watermark" v-if="visible" ref="watermark"></div>
</template>
<script>
export default {
props: {
text: {
type: String,
required: true
},
visible: {
type: Boolean,
default: true
}
},
mounted() {
this.addWatermark(this.text);
},
methods: {
addWatermark(text) {
const watermarkDiv = this.$refs.watermark;
const canvas = document.createElement('canvas');
canvas.width = 200;
canvas.height = 200;
const ctx = canvas.getContext('2d');
ctx.rotate(-20 * Math.PI / 180);
ctx.font = '20px Arial';
ctx.fillStyle = 'rgba(200, 200, 200, 0.50)';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
ctx.fillText(text, canvas.width / 2, canvas.height / 2);
watermarkDiv.style.backgroundImage = `url(${canvas.toDataURL('image/png')})`;
watermarkDiv.style.pointerEvents = 'none';
watermarkDiv.style.position = 'fixed';
watermarkDiv.style.top = 0;
watermarkDiv.style.left = 0;
watermarkDiv.style.width = '100%';
watermarkDiv.style.height = '100%';
watermarkDiv.style.zIndex = 9999;
}
}
};
</script>
3.2 动态控制水印显示
在页面中通过数据绑定控制水印的显示和隐藏。
<template>
<div>
<button @click="toggleWatermark">切换水印</button>
<Watermark :text="watermarkText" :visible="watermarkVisible"></Watermark>
<!-- 你的其他页面内容 -->
</div>
</template>
<script>
import Watermark from './components/Watermark.vue';
export default {
components: {
Watermark
},
data() {
return {
watermarkText: '这是一个水印',
watermarkVisible: true
};
},
methods: {
toggleWatermark() {
this.watermarkVisible = !this.watermarkVisible;
}
}
};
</script>
4. 总结
通过本文的介绍,我们学习了如何在Vue项目中添加满屏水印,并实现动态控制水印的显示和隐藏。使用Canvas生成水印图像,再通过CSS样式实现水印的全屏覆盖,可以有效保护网页内容。