当前位置:首页 > 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实现tab标签

vue实现tab标签

Vue 实现 Tab 标签的方法 使用动态组件和 v-for 渲染标签 通过 v-for 循环生成标签页标题,结合 v-bind:class 动态切换激活状态。使用 v-show 或动态组件 <…

vue实现a4打印模板

vue实现a4打印模板

使用Vue实现A4打印模板 在Vue中实现A4打印模板需要结合CSS的打印样式和Vue的模板渲染能力。以下是具体实现方法: 设置A4纸张尺寸 在CSS中定义A4纸张的标准尺寸(210mm × 297…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-mode…

代码实现vue

代码实现vue

创建Vue项目 使用Vue CLI快速初始化项目,确保已安装Node.js和npm/yarn: npm install -g @vue/cli vue create my-vue-project…

vue实现图册

vue实现图册

Vue实现图册功能 在Vue中实现图册功能通常涉及图片展示、切换、缩放等交互效果。以下是常见的实现方法和关键代码示例: 基础图册组件结构 使用Vue单文件组件构建基础结构: <templ…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…