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

vue 实现tabs

Vue 实现 Tabs 组件的方法 使用动态组件和 v-for 在 Vue 中实现 Tabs 可以通过动态组件和 v-for 指令结合完成。定义一个 tabs 数组,包含每个标签的标题和对应的组件。…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现popup

vue实现popup

Vue 实现 Popup 弹窗 使用 Vue 原生组件 创建一个基本的 Vue 组件作为弹窗,通过 v-if 或 v-show 控制显示隐藏。 <template> <div&…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…

vue 实现href

vue 实现href

Vue 实现 href 的方法 在 Vue 中实现 href 功能可以通过多种方式,具体取决于需求场景。以下是几种常见的方法: 使用 <a> 标签 直接使用 HTML 的 <a&g…

vue 实现滑动

vue 实现滑动

Vue 实现滑动效果的方法 在Vue中实现滑动效果可以通过多种方式,以下是几种常见的方法: 使用CSS过渡和动画 通过Vue的<transition>组件结合CSS过渡或动画实现滑动效果…