当前位置:首页 > VUE

vue页面实现水印

2026-02-20 00:05:42VUE

添加静态水印

在Vue组件中使用CSS或Canvas为页面添加静态水印。通过CSS实现简单水印:

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

<style>
.watermark-container {
  position: relative;
}
.watermark {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" opacity="0.1"><text x="50%" y="50%" fill="gray" font-size="20" text-anchor="middle" transform="rotate(-45, 100, 100)">水印内容</text></svg>');
  pointer-events: none;
  z-index: 9999;
}
</style>

动态生成水印

使用Canvas动态生成水印并处理防删除逻辑:

export default {
  mounted() {
    this.createWatermark();
  },
  methods: {
    createWatermark() {
      const canvas = document.createElement('canvas');
      canvas.width = 200;
      canvas.height = 200;
      const ctx = canvas.getContext('2d');
      ctx.font = '16px Arial';
      ctx.fillStyle = 'rgba(128, 128, 128, 0.1)';
      ctx.rotate((-45 * Math.PI) / 180);
      ctx.fillText('保密信息', 50, 100);

      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.backgroundImage = `url(${canvas.toDataURL()})`;
      watermarkDiv.style.pointerEvents = 'none';
      watermarkDiv.style.zIndex = '9999';

      document.body.appendChild(watermarkDiv);

      // 防删除监听
      const observer = new MutationObserver(() => {
        if (!document.body.contains(watermarkDiv)) {
          document.body.appendChild(watermarkDiv);
        }
      });
      observer.observe(document.body, { childList: true });
    }
  }
}

使用第三方库

安装专业水印库如vue-watermark

vue页面实现水印

npm install vue-watermark-directive

在Vue项目中全局注册指令:

import Vue from 'vue';
import watermark from 'vue-watermark-directive';

Vue.directive('watermark', watermark);

组件中使用指令:

vue页面实现水印

<template>
  <div v-watermark="{
    text: '内部使用',
    font: '16px Arial',
    fillStyle: 'rgba(0,0,0,0.1)',
    angle: -45
  }">
    <!-- 页面内容 -->
  </div>
</template>

响应式水印调整

监听窗口变化自动调整水印密度:

export default {
  data() {
    return {
      watermarkConfig: {
        text: '示例水印',
        density: this.calculateDensity()
      }
    }
  },
  mounted() {
    window.addEventListener('resize', this.handleResize);
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.handleResize);
  },
  methods: {
    calculateDensity() {
      return window.innerWidth < 768 ? 100 : 200;
    },
    handleResize() {
      this.watermarkConfig.density = this.calculateDensity();
    }
  }
}

多行水印实现

通过Canvas生成多行重复水印:

generateMultiLineWatermark() {
  const canvas = document.createElement('canvas');
  canvas.width = 400;
  canvas.height = 300;
  const ctx = canvas.getContext('2d');

  ctx.font = '14px Microsoft YaHei';
  ctx.fillStyle = 'rgba(100, 100, 100, 0.1)';
  ctx.textAlign = 'center';

  for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 3; j++) {
      ctx.save();
      ctx.translate(80 + i * 80, 60 + j * 100);
      ctx.rotate(-45 * Math.PI / 180);
      ctx.fillText(`保密 ${i+1}-${j+1}`, 0, 0);
      ctx.restore();
    }
  }

  return canvas.toDataURL();
}

标签: 水印页面
分享给朋友:

相关文章

vue实现水印组件

vue实现水印组件

Vue 水印组件实现 基础水印组件实现 创建一个基础水印组件,通过 props 接收文本、颜色、大小等参数: <template> <div class="watermark-…

vue页面分离的实现

vue页面分离的实现

Vue 页面分离的实现方法 组件化开发 Vue 的核心思想之一是组件化,通过将页面拆分为多个可复用的组件实现分离。每个组件包含独立的模板、逻辑和样式,通过 props 和 events 进行通信。…

js实现页面跳转

js实现页面跳转

使用 window.location.href 通过修改 window.location.href 属性实现页面跳转: window.location.href = 'https://example…

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,适合快速集成。以下是一个示例代码: <template>…

vue 实现页面跳转

vue 实现页面跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转可以通过多种方式,主要包括使用 Vue Router 提供的导航方法和原生 JavaScript 的方式。 使用 Vue Router 的 ro…

H5页面全景怎么实现

H5页面全景怎么实现

H5页面全景实现方法 H5页面全景效果可以通过多种技术实现,以下是几种常见的方法: 使用Three.js库 Three.js是一个基于WebGL的JavaScript库,适合创建复杂的3D全景效果。…