Vue实现页面添加满屏水印和去除水印功能

 更新时间:2024年07月17日 10:14:25   作者:前端小助手  
在一些特殊的应用场景中,可能需要在网页上添加水印以保护版权或标识信息,本文将介绍如何在Vue项目中添加满屏水印并实现去除水印的功能,文中通过代码示例讲解的非常详细,需要的朋友可以参考下

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样式实现水印的全屏覆盖,可以有效保护网页内容。

以上就是Vue实现页面添加满屏水印和去除水印功能的详细内容,更多关于Vue页面添加和去除水印的资料请关注脚本之家其它相关文章!

相关文章

  • 解决vue报错:Do not mutate vuex store state outside mutation handlers问题

    解决vue报错:Do not mutate vuex store state outside mutati

    这篇文章主要介绍了解决vue报错:Do not mutate vuex store state outside mutation handlers问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Vue自定义指令详细

    Vue自定义指令详细

    这篇文章主要介绍了Vue自定义指令,文章从背景开始详细介绍Vue自定义指令的详细内容,随着Vue自定义指令的相关资料展开具体内容,需要的朋友可以参考一下
    2021-11-11
  • 使用vue实现多规格选择实例(SKU)

    使用vue实现多规格选择实例(SKU)

    这篇文章主要介绍了使用vue实现多规格选择实例(SKU),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 解读vue生成的文件目录结构及说明

    解读vue生成的文件目录结构及说明

    本篇文章主要介绍了解读vue生成的文件目录结构及说明,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Vue+Axios实现文件上传自定义进度条

    Vue+Axios实现文件上传自定义进度条

    这篇文章主要为大家详细介绍了Vue+Axios实现文件上传自定义进度条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • React组件通信之路由传参(react-router-dom)

    React组件通信之路由传参(react-router-dom)

    本文主要介绍了React组件通信之路由传参(react-router-dom),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • vue 动态组件用法示例小结

    vue 动态组件用法示例小结

    这篇文章主要介绍了vue 动态组件用法,结合实例形式总结分析了vue 动态组件基本功能、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2020-03-03
  • 解决vue中this.$set()不更新问题

    解决vue中this.$set()不更新问题

    我在做一个附件删除功能的时候发现,明明打印出来附件已经没有数据了但是页面就是不刷新, this.$set()不生效,所以本文小编给大家介绍了vue中this.$set()不更新的解决方法,需要的朋友可以参考下
    2023-11-11
  • Vue中关于this指向的问题示例详解

    Vue中关于this指向的问题示例详解

    在Vue中,方法体里用this调用vue实例的数据,有时会指向window,导致调用失败报错,这篇文章主要介绍了Vue中关于this指向的问题 ,需要的朋友可以参考下
    2022-07-07
  • vue页面中使用getElementsByClassName无法获取元素的解决

    vue页面中使用getElementsByClassName无法获取元素的解决

    这篇文章主要介绍了vue页面中使用getElementsByClassName无法获取元素的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03

最新评论