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使用element-ui的el-input监听不了回车事件的解决方法

    vue使用element-ui的el-input监听不了回车事件的解决方法

    小编在使用element-ui时,el-input组件监听不了回车事件,怎么回事呢?下面小编给大家带来了vue使用element-ui的el-input监听不了回车事件的解决方法,一起看看吧
    2018-01-01
  • vue-router子路由的实现方式

    vue-router子路由的实现方式

    这篇文章主要介绍了vue-router子路由的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 一文带你搞懂Vue中Provide/Inject的使用与高级应用

    一文带你搞懂Vue中Provide/Inject的使用与高级应用

    这篇文章将详细介绍如何在 Vue.js 中使用 provide 和 inject 模式,并探讨其在实际应用中的高级用法,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • vue3 开始时间与结束时间比较验证(结束时间需要大于开始时间)

    vue3 开始时间与结束时间比较验证(结束时间需要大于开始时间)

    本文通过示例代码介绍了vue3 开始时间与结束时间比较验证(结束时间需要大于开始时间)的相关操作,代码简单易懂,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • el-table渲染慢卡顿问题最优解决方案

    el-table渲染慢卡顿问题最优解决方案

    本文主要介绍了el-table渲染慢卡顿问题最优解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • vue filter的几种用法示例小结

    vue filter的几种用法示例小结

    Vue.filter函数用于注册一个全局的过滤器,该过滤器可以在模板和组件中使用,这篇文章主要介绍了vue filter的几种用法示例小结,需要的朋友可以参考下
    2024-08-08
  • vue实现密码显示与隐藏按钮的自定义组件功能

    vue实现密码显示与隐藏按钮的自定义组件功能

    本文通过两种思路给大家介绍vue实现密码显示与隐藏按钮的自定义组件功能,感兴趣的朋友跟随小编一起看看吧
    2019-04-04
  • Vue props 单向数据流的实现

    Vue props 单向数据流的实现

    这篇文章主要介绍了Vue props 单向数据流的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • vue懒加载和子组件懒加载的区别详解

    vue懒加载和子组件懒加载的区别详解

    这篇文章主要给大家介绍了vue懒加载和子组件懒加载有什么区别,Vue懒加载指的是对图片等资源的延迟加载,而子组件懒加载则是指延迟加载组件实例,文中通过代码示例给大家讲解的非常详细,需要的朋友可以参考下
    2023-12-12
  • vue axios接口请求封装方式

    vue axios接口请求封装方式

    这篇文章主要介绍了vue axios接口请求封装方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01

最新评论