当前位置:首页 > VUE

vue实现网页水印

2026-01-11 22:19:50VUE

添加静态水印

在Vue中可以通过CSS或Canvas实现静态水印。CSS方法适合简单文字水印,Canvas适合复杂水印效果。

<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%;
  pointer-events: none;
  background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"><text x="0" y="20" font-family="Arial" font-size="10" fill="rgba(0,0,0,0.1)" transform="rotate(-45 100,100)">水印内容</text></svg>');
  background-repeat: repeat;
  z-index: 9999;
}
</style>

使用Canvas动态生成水印

Canvas可以实现更灵活的水印效果,包括旋转、透明度、字体样式等。

// utils/watermark.js
export function createWatermark(text) {
  const canvas = document.createElement('canvas')
  canvas.width = 200
  canvas.height = 200
  const ctx = canvas.getContext('2d')

  ctx.font = '14px Arial'
  ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'
  ctx.rotate(-45 * Math.PI / 180)
  ctx.fillText(text, 10, 100)

  return canvas.toDataURL()
}
<template>
  <div class="container" :style="{ backgroundImage: `url(${watermark})` }">
    <!-- 页面内容 -->
  </div>
</template>

<script>
import { createWatermark } from './utils/watermark'

export default {
  data() {
    return {
      watermark: ''
    }
  },
  mounted() {
    this.watermark = createWatermark('机密文件')
  }
}
</script>

<style>
.container {
  position: relative;
  background-repeat: repeat;
  min-height: 100vh;
}
</style>

防止水印被删除

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

// utils/protectWatermark.js
export function protectWatermark(watermarkId) {
  const targetNode = document.getElementById(watermarkId)
  if (!targetNode) return

  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      if (mutation.removedNodes.length) {
        mutation.removedNodes.forEach((node) => {
          if (node.id === watermarkId) {
            document.body.appendChild(node)
          }
        })
      }
    })
  })

  observer.observe(document.body, {
    childList: true,
    subtree: true
  })

  return observer
}

响应式水印

根据屏幕大小调整水印密度和大小。

export function createResponsiveWatermark(text) {
  const canvas = document.createElement('canvas')
  const size = window.innerWidth < 768 ? 150 : 200
  canvas.width = size
  canvas.height = size

  const ctx = canvas.getContext('2d')
  const fontSize = window.innerWidth < 768 ? 12 : 16

  ctx.font = `${fontSize}px Arial`
  ctx.fillStyle = 'rgba(0, 0, 0, 0.1)'
  ctx.rotate(-45 * Math.PI / 180)
  ctx.fillText(text, 10, size/2)

  return canvas.toDataURL()
}

多用户水印

为不同用户显示不同水印内容,通常用于追踪信息泄露源。

export function createUserWatermark(userInfo) {
  const text = `${userInfo.name} ${userInfo.id}`
  return createWatermark(text)
}

使用时在Vue组件中:

mounted() {
  const userInfo = this.$store.state.user // 从Vuex获取用户信息
  this.watermark = createUserWatermark(userInfo)
  protectWatermark('watermark-element')
}

vue实现网页水印

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

相关文章

vue实现列表水印

vue实现列表水印

实现列表水印的方法 在Vue中为列表添加水印可以通过多种方式实现,以下是几种常见的方法: 使用CSS背景图 通过CSS的background-image属性为列表容器添加水印背景。水印可以是文字或图…

vue实现网页切换

vue实现网页切换

Vue 实现网页切换的方法 在 Vue 中实现网页切换通常可以通过以下几种方式完成,具体取决于项目需求和路由管理方式。 使用 Vue Router Vue Router 是 Vue.js 官方提供…

vue网页无法实现

vue网页无法实现

常见原因分析 网络连接问题 检查网络是否正常,确保能访问外部资源。如果是本地开发环境,确认代理配置是否正确,避免因网络问题导致资源加载失败。 依赖未正确安装 运行npm install或yarn…

vue实现网页换肤

vue实现网页换肤

Vue实现网页换肤的方法 动态切换CSS类名 通过绑定不同的类名实现换肤效果。定义多套主题样式,通过切换类名来改变整体样式。 <template> <div :class="…

用记事本制作css网页

用记事本制作css网页

使用记事本制作CSS网页的方法 创建HTML文件 打开记事本,输入基本的HTML结构代码,保存为.html文件(例如index.html)。示例代码: <!DOCTYPE html&g…

Css如何制作百度网页

Css如何制作百度网页

制作一个类似百度的网页界面需要结合HTML结构和CSS样式设计。以下是关键实现步骤和代码示例: HTML基础结构 <!DOCTYPE html> <html> <he…