前言

最近需要实现一个水印的功能,现进行整理发出来vue进行水印功能的制作;
虽然我是用于移动端,但是PC端的实现是一样可以用的

实现

第一步:创建一个工具类

在你项目中,创建一个文件夹,专门管理你的工具类js,一般取名utils或者tools,看你自己。
然后在其中进行创建一个waterMark.js文件,把以下代码加进来。

let waterMarkDOM;

let clearWaterMark = () => {
    if (waterMarkDOM) waterMarkDOM.remove();
};
/**
 * @description: 创建水印
 * @param {String} contentText 水印内容
 */
export default function createWaterMark(waterMarkName) {
clearWaterMark();
if (!waterMarkName) {
    return;
}
let width = window.parseInt(document.body.clientWidth);
// 修改数值进行调整水印显示横轴数量
let canvasWidth = width / window.parseInt(width / 160);
let fontFamily = window.getComputedStyle(document.body)['font-family'];
const fragment = document.createDocumentFragment();
waterMarkDOM = document.createElement('div');
// 设置水印样式css 类名:water-mark-wrap,可自己修改
waterMarkDOM.className = 'water-mark-wrap';
let spanStr = '';
for (let i = 0; i < 100; i++) {
// 设置水印文字样式css // 类名:water-word,可自己修改
    spanStr += `<span class="water-word" style=width:${canvasWidth}px;height:180px;font: ${fontFamily}>${waterMarkName}</span>`;
}
waterMarkDOM.innerHTML = spanStr;
fragment.appendChild(waterMarkDOM);
document.body.appendChild(fragment);
}

第二步:在需要水印的页面引入

在你需要水印的vue页面进行引入该文件
例:

<template>
    <div>
    // 页面内容编写区
    </div>
</template>

<script>
// 引入水印js
import  waterMark from "../utils/waterMark"
    export default {
        name: "app",
    }
</script>

<style scoped>
// 样式编写区
</style>

第三步: 编写样式

在页面中编写waterMark.js文件中涉及到的样式类名的样式

<template>
    <div>
    // 页面内容编写区
    </div>
</template>

<script>
// 引入水印js
import  waterMark from "../utils/waterMark"
    export default {
        name: "app",
    }
</script>

<style scoped>
// 样式编写区
.water-mark-wrap {
    position: absolute;
    width: 100%;
    height: 100%;
    z-index: 99;
    pointer-events: none;
    top: 0;
    left: 0;
    display: flex;
    overflow: hidden;
    flex-wrap: wrap;
}
.water-word {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: rgba(8, 8, 8, 0.1);
    transform: rotate(-45deg);
    user-select: none;
}
</style>

注意:z-index属性为设置是需要将文字进行浮在别的界面内容上面还是
放置在界面内容的下面。
例:
z-index:9999 浮在界面内容上面
z-index:-1 放置在界面内容的下面

第四步:编写方法

在JavaScript书写代码区域新加一个方法

<template>
    <div>
    // 页面内容编写区
    </div>
</template>

<script>
// 引入水印js
import  waterMark from "../utils/waterMark"
    export default {
        name: "app",
        methods: {
		// 水印功能方法
		waterMarkMethod() {
		// 定义水印文本
		let waterWord = "我是水印";
		// 调用引用的水印
		waterMark(waterWord);
	}
	}
    }
</script>

<style scoped>
// 样式编写区
.water-mark-wrap {
    position: absolute;
    width: 100%;
    height: 100%;
    z-index: 99;
    pointer-events: none;
    top: 0;
    left: 0;
    display: flex;
    overflow: hidden;
    flex-wrap: wrap;
}
.water-word {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: rgba(8, 8, 8, 0.1);
    transform: rotate(-45deg);
    user-select: none;
}
</style>

第五步: 调用方法

在created或者mounted中调用该方法,以便于页面加载的时候实现水印

<template>
    <div>
    // 页面内容编写区
    </div>
</template>

<script>
// 引入水印js
import  waterMark from "../utils/waterMark"
    export default {
        name: "app",
        methods: {
		// 水印功能方法
		waterMarkMethod() {
		// 定义水印文本
		let waterWord = "我是水印";
		// 调用引用的水印
		waterMark(waterWord);
	},
	mounted() {
		// 调用水印功能方法
		this.waterMarkMethod();
	}
	}
    }
</script>

<style scoped>
// 样式编写区
.water-mark-wrap {
    position: absolute;
    width: 100%;
    height: 100%;
    z-index: 99;
    pointer-events: none;
    top: 0;
    left: 0;
    display: flex;
    overflow: hidden;
    flex-wrap: wrap;
}
.water-word {
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: rgba(8, 8, 8, 0.1);
    transform: rotate(-45deg);
    user-select: none;
}
</style>

实际效果截图

以下我本人实现水印的实际效果
在这里插入图片描述

以上截图我本人制作的一个项目截图

结语

以上,vue水印功能完成

Logo

前往低代码交流专区

更多推荐