当前位置: 首页 > 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/news/318513.html

相关文章:

  • 【计算机网络 - 基础问题】每日 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
  • jekyll相关的技术点
  • 网络PPP协议802.11协议以太网协议IPV4协议在思科模拟器的实现
  • 深度学习(5):逻辑斯蒂回归Logistic
  • 深度学习(2):梯度下降
  • Windows系统使用PHPStudy搭建Cloudreve私有云盘公网环境远程访问
  • OTTO奥托机器人开发总结
  • 2024java高频面试-数据库相关
  • 将python代码文件转成Cython 编译问题集
  • python中实用工具与自动化脚本
  • typename、非类型模板参数、模板参数的特化、模板类成员函数声明和定义分离、继承等的介绍