当前位置:首页 > VUE

vue 水印 实现

2026-01-08 03:27:08VUE

Vue 水印实现方法

使用 canvas 动态生成水印

在 Vue 组件中通过 canvas 绘制水印,并将其作为背景图片插入到目标元素中。这种方法灵活性高,支持动态调整水印内容、角度和透明度。

<template>
  <div class="watermark-container" ref="watermark"></div>
</template>

<script>
export default {
  mounted() {
    this.generateWatermark();
  },
  methods: {
    generateWatermark() {
      const canvas = document.createElement('canvas');
      canvas.width = 300;
      canvas.height = 200;
      const ctx = canvas.getContext('2d');
      ctx.font = '16px Arial';
      ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
      ctx.rotate(-20 * Math.PI / 180);
      ctx.fillText('Confidential', 50, 80);

      const watermarkUrl = canvas.toDataURL();
      this.$refs.watermark.style.backgroundImage = `url(${watermarkUrl})`;
      this.$refs.watermark.style.backgroundRepeat = 'repeat';
    }
  }
}
</script>

<style>
.watermark-container {
  width: 100%;
  height: 100%;
  position: relative;
}
</style>

使用 CSS 伪元素实现静态水印

对于简单的水印需求,可以直接通过 CSS 伪元素实现。这种方法性能更好,但灵活性较低。

<template>
  <div class="watermark-wrapper">
    <!-- 页面内容 -->
  </div>
</template>

<style>
.watermark-wrapper {
  position: relative;
}
.watermark-wrapper::after {
  content: "Watermark Text";
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  pointer-events: none;
  opacity: 0.1;
  font-size: 24px;
  color: #000;
  display: flex;
  align-items: center;
  justify-content: center;
  transform: rotate(-30deg);
}
</style>

使用第三方库 vue-watermark

对于需要快速集成的情况,可以使用专门的水印库如 vue-watermark

安装依赖:

vue 水印 实现

npm install vue-watermark --save

使用示例:

<template>
  <vue-watermark
    :text="watermarkText"
    :font="watermarkFont"
    :opacity="0.2"
    :width="200"
    :height="150"
  >
    <!-- 需要加水印的内容 -->
  </vue-watermark>
</template>

<script>
import VueWatermark from 'vue-watermark';

export default {
  components: { VueWatermark },
  data() {
    return {
      watermarkText: 'Secret',
      watermarkFont: '16px Arial'
    }
  }
}
</script>

防止水印被删除的安全方案

为防止用户通过开发者工具删除水印,可以采用以下防护措施:

vue 水印 实现

mounted() {
  this.generateWatermark();
  setInterval(() => {
    if (!document.querySelector('.watermark')) {
      this.generateWatermark();
    }
  }, 1000);
}

同时配合 MutationObserver 监听 DOM 变化:

const observer = new MutationObserver((mutations) => {
  mutations.forEach(() => {
    this.checkWatermark();
  });
});
observer.observe(document.body, { 
  childList: true, 
  subtree: true 
});

响应式水印调整

在窗口大小变化时重新计算水印位置和大小:

window.addEventListener('resize', this.handleResize);

handleResize() {
  this.generateWatermark();
}

注意在组件销毁时移除事件监听:

beforeDestroy() {
  window.removeEventListener('resize', this.handleResize);
}

标签: 水印vue
分享给朋友:

相关文章

vue实现列表水印

vue实现列表水印

实现列表水印的方法 在Vue中为列表添加水印可以通过多种方式实现,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性为列表容器添加水印背景。水印可以是文字或图…

vue实现网页水印

vue实现网页水印

Vue 实现网页水印的方法 使用 canvas 生成水印背景 通过 canvas 动态生成水印图案,将其作为背景图添加到目标元素或整个页面。这种方法灵活且支持自定义文本、旋转角度和透明度。 // 在…

vue实现前端注册

vue实现前端注册

Vue 实现前端注册功能 注册表单设计 使用 Vue 的模板语法创建注册表单,包含用户名、邮箱、密码和确认密码字段。表单需绑定 v-model 实现双向数据绑定。 <template>…

vue实现好评弹框

vue实现好评弹框

Vue 实现好评弹框的方法 使用 Vue 实现好评弹框可以通过组件化方式完成,结合动态数据绑定和事件处理。以下是具体实现步骤: 1. 创建弹框组件 新建一个 RatingDialog.vue…

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 meth…