当前位置:首页 > 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可以实现更灵活的水印效果,包括旋转、透明度、字体样式等。

vue实现网页水印

// 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
}

响应式水印

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

vue实现网页水印

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 网页实现指南 环境准备 安装 Node.js 和 npm/yarn,确保环境配置正确。使用 Vue CLI 或 Vite 创建项目框架,快速搭建开发环境。 npm install -g @…

vue 水印 实现

vue 水印 实现

Vue 水印实现方法 使用 canvas 动态生成水印 在 Vue 组件中通过 canvas 绘制水印,并将其作为背景图片插入到目标元素中。这种方法灵活性高,支持动态调整水印内容、角度和透明度。 &…

vue实现网页换肤

vue实现网页换肤

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

css制作静态网页

css制作静态网页

CSS制作静态网页的基本方法 CSS用于控制网页的样式和布局,结合HTML可以创建美观的静态网页。以下是关键步骤: HTML结构搭建 创建基本的HTML文件结构,包含<!DOCTYPE ht…

css网页尾部制作

css网页尾部制作

制作CSS网页尾部的步骤 设计尾部布局 使用<footer>标签定义尾部区域,确保包含版权信息、联系方式、社交媒体链接等必要元素。通过CSS设置背景色、内边距和边框样式增强视觉效果。 基…

css制作响应网页

css制作响应网页

响应式网页设计基础 使用CSS制作响应式网页的核心是让页面能够根据不同设备的屏幕尺寸自动调整布局和样式。主要通过媒体查询(Media Queries)、弹性布局(Flexbox)和网格布局(Grid)…