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

安装依赖:

vue 水印 实现

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>

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

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

vue 水印 实现

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();
}

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

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

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

相关文章

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue 实现滚动

vue 实现滚动

实现滚动的基本方法 在Vue中实现滚动效果可以通过多种方式完成,包括使用原生JavaScript、CSS或第三方库。以下是一些常见的方法: 使用window.scrollTo方法实现页面滚动 可以通…

vue实现vnc

vue实现vnc

Vue 实现 VNC 客户端 在 Vue 项目中实现 VNC 客户端功能,可以通过集成现有的 VNC 客户端库或组件完成。以下是具体实现方法: 安装依赖库 使用 noVNC 或其他 VNC 客户端…

vue实现筛选

vue实现筛选

实现筛选功能的基本思路 在Vue中实现筛选功能通常需要结合数据绑定、计算属性和方法。筛选的核心逻辑是根据用户输入的条件过滤原始数据列表,并动态更新显示结果。 数据准备 定义一个数组存储原始数据,另一…

vue实现hovuer

vue实现hovuer

Vue 实现 Hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 直接控制 通过 :hover 伪类实现,无需额外的 JavaScrip…

vue实现系统

vue实现系统

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