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

vue实现网页水印

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

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

相关文章

网页截图实现PHP

网页截图实现PHP

使用PHP的GD库进行网页截图 PHP本身不具备直接截取网页的功能,但可以通过调用外部工具或服务实现。以下是几种常见方法: 方法一:使用PHP的exec()调用外部工具 安装wkhtmltopdf…

vue如何实现网页预览

vue如何实现网页预览

Vue实现网页预览的方法 使用iframe嵌入预览 在Vue中可以通过iframe元素实现网页预览。iframe能够加载并显示外部网页内容,适合简单预览需求。 <template>…

vue怎么实现页面水印

vue怎么实现页面水印

实现页面水印的方法 在Vue中实现页面水印可以通过以下几种方式完成,根据需求选择合适的方法。 使用Canvas生成水印 通过Canvas绘制水印文本或图片,并将其作为背景插入到页面中。 // 在V…

vue数据绑定实现网页

vue数据绑定实现网页

Vue 数据绑定实现网页 Vue.js 通过数据绑定机制实现动态网页,核心是利用响应式系统将数据与 DOM 关联。以下是关键实现方式: 双向数据绑定(v-model) 通过 v-model 指令实现…

vue实现网页导航栏

vue实现网页导航栏

Vue 实现网页导航栏的方法 使用 Vue Router 实现导航栏 安装 Vue Router: npm install vue-router 在 main.js 或 main.ts 中引入并配置…

react网页如何部署

react网页如何部署

部署 React 网页的方法 使用 Vercel 部署 Vercel 是一个专门为前端项目优化的部署平台,支持 React 项目一键部署。在 Vercel 官网注册账号后,连接 GitHub、GitL…