当前位置:首页 > VUE

vue实现网页水印

2026-01-07 00:21:47VUE

Vue 实现网页水印的方法

使用 canvas 生成水印背景

通过 canvas 动态生成水印图案,将其作为背景图添加到目标元素或整个页面。这种方法灵活且支持自定义文本、旋转角度和透明度。

// 在 Vue 组件中定义方法
methods: {
  generateWatermark(text, color = 'rgba(180, 180, 180, 0.3)', angle = -20) {
    const canvas = document.createElement('canvas')
    canvas.width = 200
    canvas.height = 150
    const ctx = canvas.getContext('2d')

    ctx.font = '16px Arial'
    ctx.fillStyle = color
    ctx.rotate(angle * Math.PI / 180)
    ctx.fillText(text, 10, 80)

    return canvas.toDataURL('image/png')
  }
}

全局指令实现水印

创建 Vue 指令可复用水印功能,通过指令参数传递配置项。

vue实现网页水印

// 注册全局指令
Vue.directive('watermark', {
  inserted(el, binding) {
    const { text, color, angle } = binding.value || {}
    const url = this.generateWatermark(text || '保密资料', color, angle)

    el.style.backgroundImage = `url(${url})`
    el.style.backgroundRepeat = 'repeat'
  },
  methods: {
    generateWatermark() { /* 同前文方法 */ }
  }
})

// 使用方式
<div v-watermark="{ text: '内部文件', color: 'rgba(120,120,120,0.1)' }"></div>

防删除水印方案

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

vue实现网页水印

// 在 mounted 钩子中实现
mounted() {
  const watermark = document.createElement('div')
  watermark.className = 'global-watermark'
  // 设置水印样式...

  document.body.appendChild(watermark)

  const observer = new MutationObserver(() => {
    if (!document.querySelector('.global-watermark')) {
      document.body.appendChild(watermark)
    }
  })
  observer.observe(document.body, { childList: true })
}

动态水印方案

对于需要显示用户信息的水印,可结合 Vue 响应式数据实现动态更新。

data() {
  return {
    watermarkText: `用户ID: ${userID}`,
    watermarkConfig: {
      color: 'rgba(100,100,100,0.2)',
      angle: -15
    }
  }
},
watch: {
  watermarkText(newVal) {
    this.updateWatermark(newVal)
  }
}

CSS-only 简易方案

对于简单场景,可用纯 CSS 实现基础水印效果。

<div class="watermarked-container">
  <div class="watermark">样本水印</div>
  <!-- 页面内容 -->
</div>

<style>
.watermarked-container {
  position: relative;
}
.watermark {
  position: absolute;
  pointer-events: none;
  opacity: 0.2;
  transform: rotate(-15deg);
  z-index: 9999;
}
</style>

每种方案适用于不同场景,canvas 方案适合需要精细控制的场景,指令方式便于复用,MutationObserver 方案提供防删除保护,CSS 方案实现最简单。可根据实际需求选择或组合使用。

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

相关文章

css网页尾部制作

css网页尾部制作

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

vue网页无法实现

vue网页无法实现

Vue网页无法实现的原因及解决方法 检查Vue环境配置 确保项目中正确安装了Vue及相关依赖,检查package.json中Vue版本是否兼容当前项目。运行npm install或yarn inst…

vue实现pdf水印

vue实现pdf水印

添加PDF水印的实现方法 在Vue中实现PDF水印可以通过以下步骤完成,主要依赖第三方库如pdf-lib或pdf.js。 使用pdf-lib库添加水印 安装pdf-lib库: npm instal…

vue实现网页分享

vue实现网页分享

Vue 实现网页分享功能 网页分享功能通常包括原生分享(调用浏览器或设备的原生分享接口)和自定义分享(通过社交媒体API或链接实现)。以下是几种常见的实现方式: 使用 Web Share API(…

vue如何实现网页预览

vue如何实现网页预览

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

vue网页预览功能实现

vue网页预览功能实现

Vue 网页预览功能实现方法 方法一:使用 iframe 嵌入预览 在 Vue 组件中通过 iframe 标签加载目标网页,适用于简单预览场景。 <template> <di…