当前位置:首页 > 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();
}

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

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

vue 水印 实现

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

相关文章

vue 实现jqslidedown

vue 实现jqslidedown

在 Vue 中实现类似 jQuery 的 slideDown 效果,可以通过 Vue 的过渡系统或 CSS 动画结合动态样式绑定来实现。以下是几种实现方式: 使用 Vue Transition 组件…

vue实现购票

vue实现购票

Vue 实现购票功能 数据结构设计 购票功能通常需要以下数据结构: 场次信息(时间、地点、价格) 座位信息(可选座位、已售座位) 用户订单信息 示例数据结构: data() { retur…

vue 实现modal

vue 实现modal

Vue 实现 Modal 的方法 使用 Vue 原生组件 通过 Vue 的组件系统可以轻松实现 Modal。创建一个可复用的 Modal 组件,通过 props 控制显示与隐藏。 <templ…

vue实现心电图

vue实现心电图

Vue 实现心电图效果 在 Vue 中实现心电图效果通常需要结合 Canvas 或 SVG 进行动态绘图,模拟心电图数据的实时变化。以下是两种实现方式的核心思路和代码示例: 使用 Canvas 绘制…

vue实现快手

vue实现快手

Vue 实现类似快手的功能 Vue.js 是一个渐进式 JavaScript 框架,适合构建复杂的单页应用。要实现类似快手的功能,可以结合 Vue 和相关技术栈进行开发。 核心功能模块 视频流展…

vue实现刷卡

vue实现刷卡

Vue 实现刷卡效果 在 Vue 中实现刷卡效果可以通过 CSS 动画和 Vue 的过渡系统结合完成。以下是一种常见的实现方式: 基础实现方法 安装 Vue 过渡依赖(如果尚未安装): npm i…