当前位置:首页 > VUE

vue 水印 实现

2026-02-10 16:39:52VUE

Vue 水印实现方法

使用 CSS 背景图实现

在 Vue 中可以通过 CSS 的 background-image 属性添加水印。创建一个包含水印文本的 Canvas 元素,将其转换为 Data URL 后设置为背景。

// 在 Vue 组件中
methods: {
  generateWatermark(text) {
    const canvas = document.createElement('canvas');
    canvas.width = 200;
    canvas.height = 150;
    const ctx = canvas.getContext('2d');
    ctx.font = '16px Arial';
    ctx.fillStyle = 'rgba(200, 200, 200, 0.3)';
    ctx.rotate(-0.2);
    ctx.fillText(text, 10, 80);
    return canvas.toDataURL('image/png');
  }
},
mounted() {
  const watermark = this.generateWatermark('Confidential');
  document.body.style.backgroundImage = `url(${watermark})`;
  document.body.style.backgroundRepeat = 'repeat';
}

使用自定义指令实现

创建一个 Vue 自定义指令可以更灵活地控制水印的添加和移除。

vue 水印 实现

// main.js 或单独的文件
Vue.directive('watermark', {
  inserted(el, binding) {
    const { text, color, fontSize } = binding.value || {};
    const canvas = document.createElement('canvas');
    canvas.width = 200;
    canvas.height = 150;
    const ctx = canvas.getContext('2d');
    ctx.font = `${fontSize || '16px'} Arial`;
    ctx.fillStyle = color || 'rgba(200, 200, 200, 0.3)';
    ctx.rotate(-0.2);
    ctx.fillText(text || 'Watermark', 10, 80);

    el.style.backgroundImage = `url(${canvas.toDataURL('image/png')})`;
    el.style.backgroundRepeat = 'repeat';
  }
});

// 在组件中使用
<template>
  <div v-watermark="{ text: 'Sample', color: 'rgba(0,0,0,0.1)', fontSize: '20px' }">
    <!-- 内容 -->
  </div>
</template>

使用第三方库

对于更复杂的水印需求,可以考虑使用专门的水印库如 vue-watermark

安装:

vue 水印 实现

npm install vue-watermark

使用:

import VueWatermark from 'vue-watermark';

Vue.use(VueWatermark);

// 在组件中
<template>
  <vue-watermark
    :text="watermarkText"
    :font-size="16"
    :color="'rgba(0,0,0,0.1)'"
    :width="200"
    :height="150"
  >
    <!-- 内容 -->
  </vue-watermark>
</template>

防止水印被移除

为了防止用户通过开发者工具移除水印,可以结合 MutationObserver 监听 DOM 变化并重新添加水印。

mounted() {
  const observer = new MutationObserver((mutations) => {
    mutations.forEach(() => {
      if (!document.body.getAttribute('data-watermark')) {
        this.addWatermark();
      }
    });
  });

  observer.observe(document.body, {
    attributes: true,
    childList: true,
    subtree: true
  });

  this.addWatermark();
},
methods: {
  addWatermark() {
    const watermark = this.generateWatermark('Protected');
    document.body.style.backgroundImage = `url(${watermark})`;
    document.body.setAttribute('data-watermark', 'true');
  }
}

这些方法提供了从简单到高级的不同水印实现方案,可以根据具体需求选择合适的实现方式。

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

相关文章

vue实现a

vue实现a

Vue 实现 A 功能的方法 在 Vue 中实现 A 功能可以通过多种方式,具体取决于 A 功能的具体需求。以下是几种常见的实现方法: 使用 Vue 组件 通过创建自定义组件来实现 A 功能。组件可…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue nexttick实现

vue nexttick实现

Vue 中 nextTick 的实现原理 Vue 的 nextTick 是一个用于在下次 DOM 更新循环结束之后执行延迟回调的方法。它的核心实现依赖于 JavaScript 的事件循环机制。…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

vue实现login

vue实现login

Vue 实现登录功能 在 Vue 中实现登录功能通常需要以下几个步骤: 创建登录表单组件 在 Vue 项目中创建一个登录表单组件,包含用户名和密码输入框以及提交按钮。可以使用 Vue 的模板语法和双…

mvvm实现vue

mvvm实现vue

MVVM 模式在 Vue 中的实现 MVVM(Model-View-ViewModel)是一种前端架构模式,Vue 的设计灵感来源于此。以下是 MVVM 在 Vue 中的核心实现方式: 数据绑定(M…