当前位置:首页 > 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可以增强水印的防篡改性。

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

相关文章

js实现滚动条效果

js实现滚动条效果

实现滚动条效果的方法 使用原生JavaScript实现滚动条 通过监听滚动事件,可以动态调整滚动条的位置和样式。以下是一个基础实现示例: // 获取DOM元素 const container =…

jquery 效果

jquery 效果

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。jQuery 提供了丰富的效果(Effects)功能,可以轻松实现元素的动态显…

vue 水印 实现

vue 水印 实现

Vue 水印实现方法 使用 Canvas 绘制水印 在 Vue 中可以通过 Canvas 动态生成水印,并将其作为背景或覆盖层添加到页面中。 <template> <div c…

vue实现翻页效果

vue实现翻页效果

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

vue实现框架效果

vue实现框架效果

Vue实现框架效果的方法 使用Vue实现框架效果可以通过多种方式完成,包括使用Vue Router、动态组件或第三方UI库。以下是几种常见的方法: 使用Vue Router实现布局框架 Vue Ro…

uniapp 卡片效果

uniapp 卡片效果

uniapp 实现卡片效果的方法 使用 view 和 CSS 样式 通过 view 组件结合 CSS 样式可以快速实现卡片效果。设置圆角、阴影和边距来增强视觉层次感。 <view class…