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

npm install vue-watermark-directive

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

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

Vue.directive('watermark', watermark);

组件中使用指令:

<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实现结算页面

Vue 实现结算页面的核心步骤 数据绑定与表单验证 使用 Vue 的 v-model 绑定表单数据,例如收货地址、支付方式等。通过 Vue 的 computed 属性计算总价,结合 v-if 或 v-…

vue实现关闭页面

vue实现关闭页面

关闭当前页面的方法 在Vue中关闭当前页面可以通过JavaScript的window.close()方法实现。该方法会关闭当前浏览器窗口或标签页。 methods: { closePage()…

vue怎么实现页面返回

vue怎么实现页面返回

实现页面返回的方法 在Vue中实现页面返回功能可以通过以下几种方式: 使用Vue Router的go方法 this.$router.go(-1) 该方法接受一个整数参数,表示在历史记录中前进或后退…

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 r…

vue实现两个登录页面

vue实现两个登录页面

实现多个登录页面的方法 在Vue项目中实现两个不同的登录页面,可以通过路由配置和组件分离的方式完成。以下是具体实现方法: 配置路由文件 在router/index.js中定义两个独立的路由,分别…

h5实现登录页面跳转页面跳转页面跳转页面

h5实现登录页面跳转页面跳转页面跳转页面

实现登录页面跳转的方法 在H5中实现登录页面跳转可以通过多种方式完成,以下是一些常见的方法: 使用JavaScript的window.location方法 通过JavaScript的window.l…