当前位置:首页 > VUE

vue 水印 实现

2026-01-08 03:27:08VUE

Vue 水印实现方法

使用 canvas 动态生成水印

在 Vue 组件中通过 canvas 绘制水印,并将其作为背景图片插入到目标元素中。这种方法灵活性高,支持动态调整水印内容、角度和透明度。

<template>
  <div class="watermark-container" ref="watermark"></div>
</template>

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

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

<style>
.watermark-container {
  width: 100%;
  height: 100%;
  position: relative;
}
</style>

使用 CSS 伪元素实现静态水印

对于简单的水印需求,可以直接通过 CSS 伪元素实现。这种方法性能更好,但灵活性较低。

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

<style>
.watermark-wrapper {
  position: relative;
}
.watermark-wrapper::after {
  content: "Watermark Text";
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  pointer-events: none;
  opacity: 0.1;
  font-size: 24px;
  color: #000;
  display: flex;
  align-items: center;
  justify-content: center;
  transform: rotate(-30deg);
}
</style>

使用第三方库 vue-watermark

对于需要快速集成的情况,可以使用专门的水印库如 vue-watermark

安装依赖:

npm install vue-watermark --save

使用示例:

<template>
  <vue-watermark
    :text="watermarkText"
    :font="watermarkFont"
    :opacity="0.2"
    :width="200"
    :height="150"
  >
    <!-- 需要加水印的内容 -->
  </vue-watermark>
</template>

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

export default {
  components: { VueWatermark },
  data() {
    return {
      watermarkText: 'Secret',
      watermarkFont: '16px Arial'
    }
  }
}
</script>

防止水印被删除的安全方案

为防止用户通过开发者工具删除水印,可以采用以下防护措施:

mounted() {
  this.generateWatermark();
  setInterval(() => {
    if (!document.querySelector('.watermark')) {
      this.generateWatermark();
    }
  }, 1000);
}

同时配合 MutationObserver 监听 DOM 变化:

const observer = new MutationObserver((mutations) => {
  mutations.forEach(() => {
    this.checkWatermark();
  });
});
observer.observe(document.body, { 
  childList: true, 
  subtree: true 
});

响应式水印调整

在窗口大小变化时重新计算水印位置和大小:

window.addEventListener('resize', this.handleResize);

handleResize() {
  this.generateWatermark();
}

注意在组件销毁时移除事件监听:

vue 水印 实现

beforeDestroy() {
  window.removeEventListener('resize', this.handleResize);
}

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

相关文章

vue 实现

vue 实现

Vue 实现的基本步骤 安装 Vue.js 可以通过 npm 或 CDN 引入。使用 npm 安装适合大型项目,CDN 适合快速原型开发。 npm install vue 在 HTML 文件中引入…

vue实现删除

vue实现删除

Vue 实现删除功能的方法 在 Vue 中实现删除功能通常涉及以下几个步骤: 数据绑定与列表渲染 使用 v-for 指令渲染列表数据,并为每个项绑定唯一标识符(如 id)。例如: <…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

vue实现xterm

vue实现xterm

在 Vue 中集成 Xterm.js Xterm.js 是一个基于 TypeScript 的前端终端组件库,可用于在浏览器中实现终端功能。以下是在 Vue 项目中集成 Xterm.js 的详细步骤。…

vue实现转页面

vue实现转页面

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式完成,具体取决于项目结构和需求。 使用 router-link 组件 router-link 是 Vue Router…

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 动态数据绑定展示 通过 Vue 的响应式特性,实时展示数据变化。例如,表单输入与预览同步: <template> <div> <…