当前位置: 首页 > article >正文

vue2和vue3页面加自定义水印(组件化)

vue2和vue3页面加自定义水印(组件化)

// -----------------------vue3 -------------------------
<!-- Watermark.vue -->

<template>
	<div class="watermark" ref="watermark"></div>
</template>

<script setup lang="ts">
	import { onMounted, ref } from 'vue';

	const props = defineProps({
		text: {
			type: String,
			required: false,
			default: "我是水印"
		}
	});

	const watermark = ref(null);

	const addWatermark = (text) => {
		const watermarkDiv = watermark.value;
		const canvas = document.createElement('canvas');
		//在以下调整水印
		canvas.width = 200;
		canvas.height = 280;

		const ctx = canvas.getContext('2d');
		ctx.rotate(-45 * Math.PI / 180);
		ctx.font = '18px Arial';
		ctx.fillStyle = 'rgba(180, 180, 180, 0.3)';
		ctx.textAlign = 'center';
		ctx.textBaseline = 'middle';
		ctx.fillText(text, canvas.width / 2, canvas.height / 2);

		watermarkDiv.style.backgroundImage = `url(${canvas.toDataURL('image/png')})`;
		watermarkDiv.style.pointerEvents = 'none';
		watermarkDiv.style.position = 'fixed';
		watermarkDiv.style.top = 0;
		watermarkDiv.style.left = 0;
		watermarkDiv.style.width = '100%';
		watermarkDiv.style.height = '100%';
		watermarkDiv.style.zIndex = 9999;
	};

	onMounted(() => {
		addWatermark(props.text);
	});
</script>

<style scoped>
	.watermark {
		background-repeat: repeat;
	}

// --------------其他页面引用组件,这个就不写了
// ----------------------------------vue2
<!-- Watermark.vue -->
<template>
  <div class="watermark" ref="watermark"></div>
</template>

<script>
export default {
  props: {
    text: {
      type: String,
      required: false,
      default: "我是水印"
    }
  },
  mounted() {
    this.addWatermark(this.text);
  },
  methods: {
    addWatermark(text) {
      const watermarkDiv = this.$refs.watermark;
      const canvas = document.createElement('canvas');
      canvas.width = 200;
      canvas.height = 200;

      const ctx = canvas.getContext('2d');
      ctx.rotate(-20 * Math.PI / 180);
      ctx.font = '20px Arial';
      ctx.fillStyle = 'rgba(200, 200, 200, 0.50)';
      ctx.textAlign = 'center';
      ctx.textBaseline = 'middle';
      ctx.fillText(text, canvas.width / 2, canvas.height / 2);

      watermarkDiv.style.backgroundImage = `url(${canvas.toDataURL('image/png')})`;
      watermarkDiv.style.pointerEvents = 'none';
      watermarkDiv.style.position = 'fixed';
      watermarkDiv.style.top = 0;
      watermarkDiv.style.left = 0;
      watermarkDiv.style.width = '100%';
      watermarkDiv.style.height = '100%';
      watermarkDiv.style.zIndex = 9999;
    }
  }
};
</script>

<style scoped>
.watermark {
  background-repeat: repeat;
}
</style>


// --------------其他页面引用组件,这个就不写了


http://www.kler.cn/a/318513.html

相关文章:

  • 【VIM】vim 常用命令
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • 设计模式练习(一) 单例模式
  • acwing算法基础02一高精度,前缀和,差分
  • Django基础用法+Demo演示
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • 【计算机网络 - 基础问题】每日 3 题(二十)
  • SpringBoot的应用
  • 现代桌面UI框架科普及WPF入门1
  • Mac电脑上最简单安装Python的方式
  • Java:文件操作
  • [spring]用MyBatis XML操作数据库 其他查询操作 数据库连接池 mysql企业开发规范
  • WPF入门教学十四 命令与ICommand接口
  • OpenAI GPT o1技术报告阅读(5)-安全性对齐以及思维链等的综合评估与思考
  • Servlet入门:服务端小程序的初试(自己学习整理的资料)
  • R包:gplots经典热图
  • CentOS中使用Docker运行mysql并挂载本地目录
  • 滚雪球学SpringCloud[9.3讲]:微服务监控与运维详解
  • redis 快速入门
  • Serilog文档翻译系列(五) - 编写日志事件
  • [利用python进行数据分析01] “来⾃Bitly的USA.gov数据” 分析出各个地区的 windows和非windows用户
  • vue2 实现简易版的模糊查询功能
  • 大数据新视界 --大数据大厂之大数据实战指南:Apache Flume 数据采集的配置与优化秘籍
  • RabbitMQ 高级特性——发送方确认
  • 实现信创Linux桌面录制成MP4(源码,银河麒麟、统信UOS)
  • debain 登录后提示符显示ip