当前位置:首页 > VUE

vue 水印 实现

2026-01-14 00:05:07VUE

Vue 水印实现方法

使用 Canvas 绘制水印

在 Vue 中可以通过 Canvas 动态生成水印,并将其作为背景或覆盖层添加到页面中。

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

<script>
export default {
  mounted() {
    this.createWatermark('Watermark Text', 30, -20, 'rgba(200, 200, 200, 0.2)');
  },
  methods: {
    createWatermark(text, fontSize, angle, color) {
      const canvas = document.createElement('canvas');
      canvas.width = 200;
      canvas.height = 100;
      const ctx = canvas.getContext('2d');

      ctx.font = `${fontSize}px Arial`;
      ctx.fillStyle = color;
      ctx.rotate(angle * Math.PI / 180);
      ctx.fillText(text, 10, 50);

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

      document.body.appendChild(watermarkDiv);
    }
  }
}
</script>

使用 CSS 重复背景

对于简单的水印效果,可以直接使用 CSS 背景重复实现。

<template>
  <div class="watermarked-content" :style="watermarkStyle">
    <!-- 页面内容 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      watermarkStyle: {
        backgroundImage: 'url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\' width=\'200\' height=\'100\'><text x=\'10\' y=\'50\' font-family=\'Arial\' font-size=\'20\' fill=\'rgba(200,200,200,0.2)\' transform=\'rotate(-20)\'>Watermark</text></svg>")',
        backgroundRepeat: 'repeat'
      }
    }
  }
}
</script>

使用第三方库

对于更复杂的水印需求,可以考虑使用专门的 Vue 水印库,如 vue-watermark

安装:

npm install vue-watermark --save

使用:

<template>
  <watermark :text="watermarkText" :opacity="0.3" :font-size="16">
    <!-- 需要加水印的内容 -->
  </watermark>
</template>

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

export default {
  components: {
    Watermark
  },
  data() {
    return {
      watermarkText: 'Confidential'
    }
  }
}
</script>

防止水印被删除

为防止用户通过开发者工具删除水印,可以添加 MutationObserver 监听 DOM 变化。

methods: {
  protectWatermark() {
    const targetNode = document.body;
    const config = { childList: true, subtree: true };

    const callback = function(mutationsList) {
      for(const mutation of mutationsList) {
        if(mutation.removedNodes.length > 0) {
          const watermark = document.querySelector('.watermark');
          if(!watermark) {
            this.createWatermark();
          }
        }
      }
    };

    const observer = new MutationObserver(callback.bind(this));
    observer.observe(targetNode, config);
  }
}

响应式水印调整

确保水印在不同屏幕尺寸下都能正常显示。

methods: {
  adjustWatermark() {
    window.addEventListener('resize', () => {
      const watermark = document.querySelector('.watermark');
      if(watermark) {
        document.body.removeChild(watermark);
        this.createWatermark();
      }
    });
  }
}

以上方法可以根据具体需求选择或组合使用,实现不同复杂度的水印效果。

vue 水印 实现

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

相关文章

vue实现文件下载

vue实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并触发点击事件实现文件下载。适用于直接下载服务器上的静态文件或 Blob 数据。 downloadFile(url, fileName) { c…

vue实现预约页面

vue实现预约页面

Vue 预约页面实现步骤 准备工作 安装Vue CLI创建项目,确保已配置好开发环境。使用vue create appointment-page初始化项目,选择默认配置或手动配置。 页面结构设计 在…

vue实现视频开场

vue实现视频开场

使用 Vue 实现视频开场动画 在 Vue 中实现视频开场动画可以通过结合 HTML5 的 <video> 标签和 Vue 的过渡效果或生命周期钩子来完成。以下是具体实现方法: 安装依赖…

vue实现多级弹窗

vue实现多级弹窗

Vue 多级弹窗实现方法 方法一:使用动态组件与递归组件 在 Vue 中可以通过动态组件配合递归组件实现多级弹窗。定义一个基础弹窗组件,通过递归调用自身实现层级嵌套。 基础弹窗组件模板示例:…

vue实现横向导航

vue实现横向导航

vue实现横向导航的方法 使用Flex布局实现横向导航 在Vue中可以通过Flex布局快速实现横向导航。创建一个组件,使用display: flex和flex-direction: row属性使导航项…

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…