当前位置:首页 > VUE

vue 水印 实现

2026-01-14 00:05:07VUE

Vue 水印实现方法

使用 Canvas 绘制水印

在 Vue 中可以通过 Canvas 动态生成水印,并将其作为背景或覆盖层添加到页面中。

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

<script>
export default {
  mounted() {
    this.createWatermark('Watermark Text', 30, -20, 'rgba(200, 200, 200, 0.2)');
  },
  methods: {
    createWatermark(text, fontSize, angle, color) {
      const canvas = document.createElement('canvas');
      canvas.width = 200;
      canvas.height = 100;
      const ctx = canvas.getContext('2d');

      ctx.font = `${fontSize}px Arial`;
      ctx.fillStyle = color;
      ctx.rotate(angle * Math.PI / 180);
      ctx.fillText(text, 10, 50);

      const watermarkDiv = document.createElement('div');
      watermarkDiv.style.position = 'fixed';
      watermarkDiv.style.top = '0';
      watermarkDiv.style.left = '0';
      watermarkDiv.style.width = '100%';
      watermarkDiv.style.height = '100%';
      watermarkDiv.style.pointerEvents = 'none';
      watermarkDiv.style.backgroundImage = `url(${canvas.toDataURL()})`;
      watermarkDiv.style.zIndex = '9999';

      document.body.appendChild(watermarkDiv);
    }
  }
}
</script>

使用 CSS 重复背景

对于简单的水印效果,可以直接使用 CSS 背景重复实现。

<template>
  <div class="watermarked-content" :style="watermarkStyle">
    <!-- 页面内容 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      watermarkStyle: {
        backgroundImage: 'url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\' width=\'200\' height=\'100\'><text x=\'10\' y=\'50\' font-family=\'Arial\' font-size=\'20\' fill=\'rgba(200,200,200,0.2)\' transform=\'rotate(-20)\'>Watermark</text></svg>")',
        backgroundRepeat: 'repeat'
      }
    }
  }
}
</script>

使用第三方库

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

vue 水印 实现

安装:

npm install vue-watermark --save

使用:

vue 水印 实现

<template>
  <watermark :text="watermarkText" :opacity="0.3" :font-size="16">
    <!-- 需要加水印的内容 -->
  </watermark>
</template>

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

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

防止水印被删除

为防止用户通过开发者工具删除水印,可以添加 MutationObserver 监听 DOM 变化。

methods: {
  protectWatermark() {
    const targetNode = document.body;
    const config = { childList: true, subtree: true };

    const callback = function(mutationsList) {
      for(const mutation of mutationsList) {
        if(mutation.removedNodes.length > 0) {
          const watermark = document.querySelector('.watermark');
          if(!watermark) {
            this.createWatermark();
          }
        }
      }
    };

    const observer = new MutationObserver(callback.bind(this));
    observer.observe(targetNode, config);
  }
}

响应式水印调整

确保水印在不同屏幕尺寸下都能正常显示。

methods: {
  adjustWatermark() {
    window.addEventListener('resize', () => {
      const watermark = document.querySelector('.watermark');
      if(watermark) {
        document.body.removeChild(watermark);
        this.createWatermark();
      }
    });
  }
}

以上方法可以根据具体需求选择或组合使用,实现不同复杂度的水印效果。

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

相关文章

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue代理实现

vue代理实现

Vue 代理实现方法 在 Vue 项目中,配置代理可以解决开发环境下的跨域问题,通常通过修改 vue.config.js 文件实现。以下是几种常见的代理配置方式: 基础代理配置 在 vue.conf…

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…

vue实现增加

vue实现增加

实现 Vue 中的新增功能 在 Vue 中实现新增功能通常涉及数据绑定、表单处理和状态管理。以下是几种常见的实现方式: 数据绑定与列表渲染 通过 v-model 绑定表单输入,使用数组的 push…

vue工序实现

vue工序实现

Vue 工序实现方法 在Vue中实现工序(或流程)功能,通常涉及状态管理、组件通信和动态渲染。以下是几种常见方法: 使用动态组件 通过Vue的<component :is="currentC…