Vue實(shí)現(xiàn)頁面添加滿屏水印和去除水印功能
1. 前言
在一些特殊的應(yīng)用場景中,可能需要在網(wǎng)頁上添加水印以保護(hù)版權(quán)或標(biāo)識信息。本文將介紹如何在Vue項(xiàng)目中添加滿屏水印并實(shí)現(xiàn)去除水印的功能。
2. 添加滿屏水印
2.1 創(chuàng)建水印組件
首先,我們需要創(chuàng)建一個水印組件,該組件會在頁面上生成一個滿屏的水印。
<!-- 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>
<!-- 你的其他頁面內(nèi)容 -->
</div>
</template>
<script>
import Watermark from './components/Watermark.vue';
export default {
components: {
Watermark
}
};
</script>
示例效果

3. 去除水印
為了去除水印,我們可以使用一個簡單的方法來控制水印組件的顯示和隱藏。
3.1 修改Watermark組件以支持動態(tài)顯示
在水印組件中添加一個v-if指令,以便動態(tài)控制其顯示和隱藏。
<!-- 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 動態(tài)控制水印顯示
在頁面中通過數(shù)據(jù)綁定控制水印的顯示和隱藏。
<template>
<div>
<button @click="toggleWatermark">切換水印</button>
<Watermark :text="watermarkText" :visible="watermarkVisible"></Watermark>
<!-- 你的其他頁面內(nèi)容 -->
</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. 總結(jié)
通過本文的介紹,我們學(xué)習(xí)了如何在Vue項(xiàng)目中添加滿屏水印,并實(shí)現(xiàn)動態(tài)控制水印的顯示和隱藏。使用Canvas生成水印圖像,再通過CSS樣式實(shí)現(xiàn)水印的全屏覆蓋,可以有效保護(hù)網(wǎng)頁內(nèi)容。
以上就是Vue實(shí)現(xiàn)頁面添加滿屏水印和去除水印功能的詳細(xì)內(nèi)容,更多關(guān)于Vue頁面添加和去除水印的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決vue報(bào)錯:Do?not?mutate?vuex?store?state?outside?mutati
這篇文章主要介紹了解決vue報(bào)錯:Do?not?mutate?vuex?store?state?outside?mutation?handlers問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
使用vue實(shí)現(xiàn)多規(guī)格選擇實(shí)例(SKU)
這篇文章主要介紹了使用vue實(shí)現(xiàn)多規(guī)格選擇實(shí)例(SKU),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Vue+Axios實(shí)現(xiàn)文件上傳自定義進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了Vue+Axios實(shí)現(xiàn)文件上傳自定義進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
React組件通信之路由傳參(react-router-dom)
本文主要介紹了React組件通信之路由傳參(react-router-dom),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
vue頁面中使用getElementsByClassName無法獲取元素的解決
這篇文章主要介紹了vue頁面中使用getElementsByClassName無法獲取元素的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

