当前位置:首页 > VUE

vue实现水印效果

2026-01-18 02:08:40VUE

实现水印效果的几种方法

在Vue中实现水印效果可以通过多种方式,以下是几种常见的方法:

使用CSS背景图

通过CSS的background-image属性可以实现简单的水印效果。定义一个包含水印文本的SVG或PNG图像,将其设置为背景图。

<template>
  <div class="watermarked"></div>
</template>

<style>
.watermarked {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><text x='50%' y='50%' font-size='20' fill='rgba(0,0,0,0.1)' text-anchor='middle' transform='rotate(-45, 100, 100)'>WATERMARK</text></svg>");
  background-repeat: repeat;
}
</style>

使用Canvas动态生成水印

通过Canvas动态生成水印,可以灵活调整水印内容、颜色、角度等属性。

vue实现水印效果

<template>
  <div ref="watermarkContainer"></div>
</template>

<script>
export default {
  mounted() {
    this.generateWatermark();
  },
  methods: {
    generateWatermark() {
      const canvas = document.createElement('canvas');
      canvas.width = 200;
      canvas.height = 200;
      const ctx = canvas.getContext('2d');
      ctx.font = '20px Arial';
      ctx.fillStyle = 'rgba(0, 0, 0, 0.1)';
      ctx.textAlign = 'center';
      ctx.textBaseline = 'middle';
      ctx.translate(100, 100);
      ctx.rotate(-Math.PI / 4);
      ctx.fillText('WATERMARK', 0, 0);

      const watermarkUrl = canvas.toDataURL();
      this.$refs.watermarkContainer.style.backgroundImage = `url(${watermarkUrl})`;
      this.$refs.watermarkContainer.style.backgroundRepeat = 'repeat';
    }
  }
}
</script>

使用第三方库

可以使用第三方库如vue-watermark来快速实现水印效果。

安装:

vue实现水印效果

npm install vue-watermark

使用:

<template>
  <vue-watermark :text="watermarkText" :opacity="0.1" :width="200" :height="200" :rotate="-45">
    <div>你的内容</div>
  </vue-watermark>
</template>

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

export default {
  components: {
    VueWatermark
  },
  data() {
    return {
      watermarkText: 'WATERMARK'
    };
  }
}
</script>

防止水印被移除

为了增强水印的防篡改性,可以通过MutationObserver监听DOM变化,确保水印被移除后能重新添加。

mounted() {
  this.generateWatermark();
  this.observeWatermark();
},
methods: {
  observeWatermark() {
    const targetNode = this.$refs.watermarkContainer;
    const config = { attributes: true, childList: true, subtree: true };
    const callback = (mutationsList) => {
      for (const mutation of mutationsList) {
        if (mutation.type === 'childList' || mutation.type === 'attributes') {
          this.generateWatermark();
        }
      }
    };
    const observer = new MutationObserver(callback);
    observer.observe(targetNode, config);
  }
}

总结

以上方法可以根据需求选择适合的实现方式。CSS背景图适合简单场景,Canvas动态生成适合需要灵活调整的场景,第三方库适合快速集成。通过MutationObserver可以增强水印的防篡改性。

标签: 水印效果
分享给朋友:

相关文章

vue实现放大效果

vue实现放大效果

使用 CSS 过渡实现放大效果 通过 Vue 的 v-bind:class 或 v-bind:style 动态绑定 CSS 类或样式,结合 CSS 的 transform: scale() 实现平滑过…

vue实现翻页效果

vue实现翻页效果

使用Vue实现翻页效果 在Vue中实现翻页效果通常需要结合分页组件和数据处理逻辑。以下是几种常见方法: 基础分页组件实现 <template> <div> <…

vue实现气泡效果

vue实现气泡效果

实现气泡效果的方法 在Vue中实现气泡效果可以通过CSS动画、第三方库或自定义组件完成。以下是几种常见方法: 使用纯CSS动画 通过CSS的@keyframes和transform属性创建气泡上升动…

vue实现玻璃效果

vue实现玻璃效果

实现玻璃效果的方法 在Vue中实现玻璃效果(毛玻璃或磨砂玻璃)可以通过CSS的backdrop-filter属性结合Vue的动态样式绑定来实现。以下是具体步骤: 使用CSS backdrop-fil…

vue实现过度效果

vue实现过度效果

Vue 过渡效果实现方法 Vue 提供了内置的 <transition> 和 <transition-group> 组件,用于在元素或组件进入/离开 DOM 时应用过渡效果。…

vue 实现动画效果

vue 实现动画效果

Vue 实现动画效果的方法 Vue 提供了多种方式实现动画效果,包括内置的过渡系统、第三方动画库以及 CSS 动画。以下是几种常见的方法: 使用 Vue 内置过渡系统 Vue 的 <trans…