uniapp加水印

<watermark text="仅供演示,不为真实" color="rgba(0, 0, 0, 0.15)" :fontSize="24" :rotateAngle="-45" :gapX="170" :gapY="200">

</watermark>

export default 下加:

components: {

watermark

},

import watermark from '@/components/watermark.vue'

watermark.vue文件在components里

复制代码
<template>
	    <view class="watermark-container">
		        <!-- 水印层 -->
		        <view class="watermark-layer">
			            <view class="watermark-grid">
				                <view class="watermark-item" v-for="(item, index) in watermarkList" :key="index"
					 :style="{
                          left: item.left + 'px',
                          top: item.top + 'px'
                      }">
					                    <text class="watermark-text" :style="{                         color: color,    
						                    fontSize: fontSize + 'px' ,                         transform:
						`rotate(${rotateAngle}deg)`                     }">{{ text }}</text>
					                </view>
				            </view>
			        </view>

		        <!-- 内容层 -->
		        <view class="watermark-content">
			            <slot></slot>
			        </view>
		    </view>
</template>

<script>
	export default {
		name: "watermark",
		props: {
			// 水印文字内容
			text: {
				type: String,
				default: '内部资料'
			},
			// 水印文字颜色
			color: {
				type: String,
				default: 'rgba(0, 0, 0, 0.1)'
			},
			// 水印文字大小
			fontSize: {
				type: Number,
				default: 16
			},
			// 水印旋转角度
			rotateAngle: {
				type: Number,
				default: -30
			},
			// 水印水平间距 (密度)
			gapX: {
				type: Number,
				default: 200
			},
			// 水印垂直间距 (密度)
			gapY: {
				type: Number,
				default: 200
			}
		},
		data() {
			return {
				watermarkList: []
			};
		},
		mounted() {
			this.generateWatermark();
		},
		methods: {
			generateWatermark() {
				// 计算需要多少个水印来覆盖屏幕
				const systemInfo = uni.getSystemInfoSync();
				const screenWidth = systemInfo.windowWidth || systemInfo.screenWidth;
				const screenHeight = systemInfo.windowHeight || systemInfo.screenHeight;

				const cols = Math.ceil(screenWidth / this.gapX) + 2; // 多加几列确保覆盖
				const rows = Math.ceil(screenHeight / this.gapY) + 2; // 多加几行确保覆盖

				const watermarkList = [];
				for (let i = 0; i < cols; i++) {
					for (let j = 0; j < rows; j++) {
						watermarkList.push({
							left: i * this.gapX,
							top: j * this.gapY
						});
					}
				}

				this.watermarkList = watermarkList;
			}
		}
	}
</script>

<style lang="scss" scoped>
	.watermark-container {
	position:
	relative;
	width: 100%;
	min-height: 100vh;
	overflow:
	hidden;
	}
	.watermark-layer {
	position:
	fixed;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 9999;
	pointer-events:
	none;
	overflow:
	hidden;
	}
	.watermark-grid {
	width: 100%;
	height: 100%;
	}
	.watermark-item {
	position:
	absolute;
	display:
	flex;
	justify-content:
	center;
	align-items:
	center;
	}
	.watermark-text {
	white-space:
	nowrap;
	user-select:
	none;
	display:
	block;
	}
	.watermark-content {
	position:
	relative;
	z-index: 1;
	width: 100%;
	height: 100%;
	background-color:
	transparent;
	}
</style>
相关推荐
喵个咪11 分钟前
GoWind CMS 拆解:发布审批——多级推进、逐级角色与全程留痕
前端·后端·go
喵个咪20 分钟前
GoWind Flow 拆解:一个 Go 工作流引擎与它的双模式设计器
前端·后端·go
喵个咪40 分钟前
GoWind Admin 拆解:打印模板设计器——从画布到服务端 PDF 的完整打印链路
前端·后端·go
总要学点什么1 小时前
第96篇:三维数据加载-城市建筑白模样式+着色器——让色带按体量上色,最白的那档却涂不上去
前端·gis·webgl·cesium·着色器·空间分析·白模
文丑颜不良啊1 小时前
LeetCode2441~2460题目解析
java·leetcode
Hilaku2 小时前
你们公司有 35 岁以上的前端吗?
前端·javascript·程序员
徐小夕2 小时前
开源Vector-Graph-RAG:向量+图谱双引擎,打破纯向量RAG的效果天花板
前端·vue.js·github
阿屿2 小时前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能
SameX2 小时前
HarmonyOS ArkTS 把组件截图保存成 PNG 再调系统分享面板的做法
前端
灿飞2 小时前
Kotlin与Java虚拟机十一:类与属性:构造顺序、backing field 与显式 backing field
java·后端·kotlin