当前位置:首页 > VUE

vue 水印 实现

2026-03-28 02:34:20VUE

实现 Vue 水印的几种方法

使用 CSS 背景图实现水印

通过 CSS 的 background-imagebackground-repeat 属性实现水印效果,适合静态水印。

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

<style>
.watermark-container {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='100'><text x='10' y='50' fill='rgba(0,0,0,0.1)' transform='rotate(-30)' font-size='20'>Watermark</text></svg>");
  background-repeat: repeat;
}
</style>

使用 Canvas 动态生成水印

通过 Canvas 动态绘制水印文字,适合需要动态修改水印内容的场景。

vue 水印 实现

<template>
  <div ref="watermark"></div>
</template>

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

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

使用第三方库 vue-watermark

对于更复杂的需求,可以使用现成的 Vue 插件如 vue-watermark

安装:

vue 水印 实现

npm install vue-watermark

使用:

<template>
  <vue-watermark :text="watermarkText" :opacity="0.1" :width="200" :height="100" />
</template>

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

export default {
  components: { VueWatermark },
  data() {
    return {
      watermarkText: 'Confidential'
    }
  }
}
</script>

防止水印被删除

通过 MutationObserver 监听 DOM 变化,防止水印被删除。

<script>
export default {
  mounted() {
    this.protectWatermark();
  },
  methods: {
    protectWatermark() {
      const observer = new MutationObserver((mutations) => {
        mutations.forEach(() => {
          if (!document.getElementById('watermark')) {
            this.generateWatermark();
          }
        });
      });
      observer.observe(document.body, { childList: true });
    }
  }
}
</script>

注意事项

  • 水印颜色建议使用半透明效果,避免影响内容阅读
  • 对于重要文档,建议结合后端生成水印图片
  • 旋转角度(如-30度)可以防止简单截图盗用
  • 水印密度根据实际需求调整,避免过于密集影响美观

以上方法可根据实际项目需求选择或组合使用,Canvas 方式灵活性最高,适合动态内容;CSS 方式性能最优;第三方库则提供开箱即用的解决方案。

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

相关文章

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vue…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…

vue nexttick 实现

vue nexttick 实现

Vue nextTick 实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它主要用于确保在 DOM 更新完成后执行某些操作。 核心实现机制 ne…

实现简单vue

实现简单vue

实现一个简单的 Vue.js 框架 Vue.js 的核心功能包括数据绑定、响应式系统和虚拟 DOM。以下是一个简化版的 Vue 实现,涵盖基本功能。 数据响应式系统 使用 Object.define…

node vue实现

node vue实现

Node.js 与 Vue.js 实现方案 环境搭建 安装 Node.js(建议 LTS 版本),通过 npm 或 yarn 初始化项目。Vue.js 可通过 Vue CLI 快速搭建: npm…

实现vue vm

实现vue vm

Vue VM 实现方法 Vue VM(ViewModel)是 Vue.js 的核心概念之一,负责连接视图(View)和数据模型(Model)。以下是实现 Vue VM 的几种方法: 使用 Vue 实…