我是靠谱客的博主 会撒娇大叔,最近开发中收集的这篇文章主要介绍Vue自定义指令给box添加水印,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、创建directive.js,并引入/src/utils下

import Vue from 'vue'
Vue.directive('watermark',(el,binding)=>{
function addWaterMarker(str,parentNode,font,textColor){// 水印文字,父元素,字体,文字颜色
var can = document.createElement('canvas');
parentNode.appendChild(can);
can.width = 130;
can.height = 180;
can.style.display = 'none';
var cans = can.getContext('2d');
cans.rotate(-40 * Math.PI / 180);
cans.font = font || "18px Microsoft JhengHei";
cans.fillStyle = textColor || "rgba(180, 180, 180, 0.3)";
cans.textAlign = 'center';
cans.textBaseline = 'Middle';
cans.fillText(str, can.width / 5, can.height / 3);
parentNode.style.zIndex = '100000'
parentNode.style.backgroundImage = "url(" + can.toDataURL("image/png") + ")";
}
addWaterMarker(binding.value.text, el, binding.value.font, binding.value.textColor)
})

2、在main.js中全局引入

import
'@/utils/directives'

3、水印使用

<div class="watermark"
v-watermark="{text:'水印文字',textColor:'rgba(180, 180, 180, 1)'}">
</div>

在所需要盒子的div上直接使用v-watermark自定义指令即可

 解决水印会被子盒子盖住的问题

1)建立一个专门的水印盒子(大小自定)

2)用定位将盒子固定在所需位置

3)因为parentNode.style.zIndex = '100000',水印优先级已经最高,所以会覆盖下面盒子的各种事件,只需在水印盒子的style里加上pointer-events: none即可,可达到事件穿透。


.watermark {
position: absolute;
top: 10px;
left: 10px;
width: 480px;
height: 610px;
pointer-events: none;
}

最后

以上就是会撒娇大叔为你收集整理的Vue自定义指令给box添加水印的全部内容,希望文章能够帮你解决Vue自定义指令给box添加水印所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部