vue3 添加水印效果

news2024/9/27 21:29:00

效果图

水印组件

<template>
    <div class="elementdiv" ref="waterMarkRef">
        <slot></slot>
    </div>
</template>

<script setup>
import { ref, onMounted, nextTick } from "vue";
import Watermark from "@/utils/setWaterMark.js";

let waterMarkRef = ref();
onMounted(() => {
    Watermark.set("dong");
});
</script>

<style lang="less" scoped>
.elementdiv {
    width: 100%;
    height: 100%;
}
</style>

引入的 setWaterMark.js

/*水印配置*/
//声明 
let watermark = {}
    //水印配置 
let setWatermark = (str) => {
    let id = '1.23452384164.123412415'
        // 移除水印 判断
    if (document.getElementById(id) !== null) {
        document.body.removeChild(document.getElementById(id))
    }

    //创建画布
    let createCanvas = document.createElement('canvas')
        // 设置canvas画布大小
    createCanvas.width = 250 //宽度
    createCanvas.height = 220 //高度

    //创建Context2D对象作为2D渲染的上下文。
    let Context2D = createCanvas.getContext('2d')
        /*水印样式调整配置*/
    Context2D.rotate(-20 * Math.PI / 100) // 水印旋转角度
    Context2D.font = '20px Vedana' //水印文字大小
    Context2D.fillStyle = '#fff' //水印颜色 HEX格式,可使用red 或者rgb格式
    Context2D.textAlign = 'center' //水印水平位置
    Context2D.textBaseline = 'Middle' //水印垂直位置
    Context2D.fillText(str, createCanvas.width / 3, createCanvas.height / 2)

    //创建元素
    let createDiv = document.createElement('div')
    createDiv.id = id
        //水印默认设置
    createDiv.style.pointerEvents = 'none' //水印层事件穿透 让水印不阻止交互事件
    createDiv.style.top = '70px' //水印顶部距离
    createDiv.style.left = '0px' //水印左侧距离
    createDiv.style.opacity = '0.75' //水印透明度
    createDiv.style.position = 'fixed' //水印定位
    createDiv.style.zIndex = '100000' //水印样式优先显示
    createDiv.style.width = document.documentElement.clientWidth - 100 + 'px' //水印宽度
    createDiv.style.height = document.documentElement.clientHeight - 100 + 'px' //水印高度
    createDiv.style.background = 'url(' + createCanvas.toDataURL('image/png') + ') left top repeat' //水印显示(关键代码)
    document.body.appendChild(createDiv) //在指定元素节点的最后一个子节点之后添加节点
    return id
}

// 此方法只允许调用一次
watermark.set = (str) => {
    let id = setWatermark(str)
        //设置间隔
    setInterval(() => {
            if (document.getElementById(id) === null) {
                id = setWatermark(str)
            }
        }, 500)
        //改变大小时执行
    window.onresize = () => {
        setWatermark(str)
    }
}

export default watermark

父节点

<template>
    <waterMark>
        <div
            @click="dbPosition"
            class="viewer-container"
            :class="{ active: viewerActive }"
            id="viewer-container"
        >
        </div>
    </waterMark>
</template>
<script setup>

import waterMark from "@/components/waterMark.vue";

</script>    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1078540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mock工具之Moco使用

一、什么是Mock mock英文单词有愚弄、嘲笑、模拟的意思&#xff0c;这里主要是模拟的意思 二、什么是Moco 开源的、基于java开发的一个mock框架支持http、https、socket等协议 三、Mock的特点 只需要简单的配置request、response等即可满足要求 支持在request 中设置headers、…

【Ceph Block Device】块设备挂载使用

文章目录 前言创建pool创建user创建image列出image检索image信息调整image大小增加image大小减少image大小 删除image从pool中删除image从pool中“延迟删除”image从pool中移除“延迟删除的image” 恢复image恢复指定pool中延迟删除的image恢复并重命名image 映射块设备格式化i…

Rockchip RK3399 - linux下抓取usb数据包

---------------------------------------------------------------------------------------------------------------------------- 开发板 &#xff1a;NanoPC-T4开发板eMMC &#xff1a;16GBLPDDR3 &#xff1a;4GB 显示屏 &#xff1a;15.6英寸HDMI接口显示屏u-boot &…

03黑马店评-添加商户缓存和商户类型的缓存到Redis

商户查询缓存 什么是缓存 实际开发过程中数据量可以达到几千万,缓存可以作为避震器防止过高的数据访问猛冲系统,避免系统内的操作线程无法及时处理信息而瘫痪 缓存(Cache)就是数据交换的缓冲区(储存临时数据的地方),我们俗称的"缓存"实际就是缓冲区内的数据(一般从…

L14D6内核模块编译方法

一、内核模块基础代码解析 一个内核模块代码错误仍然会导致的内核崩溃。 GPL协议&#xff1a;开源规定&#xff0c;使用内核一些函数需要 1、单内核的缺点 单内核扩展性差的缺点减小内核镜像文件体积&#xff0c;一定程度上节省内存资源提高开发效率不能彻底解决稳定性低的缺…

香港鼎鑫鸿鄴:紧跟国家新能源政策,制定合理发展规划

由于全球环境的变化以及环境的需要,世界上的许多资源企业正在努力研究和开发新的、更好的绿色产品和服务,并且取得了一系列的突破和成果——其中最为瞩目的是新能源领域的发展与革新。随着我国经济的快速发展,人民生活水平的不断提高,对清洁能源的需求日益增长,同时也带动了新能…

python 定时器

需求 我想在某一时刻完成某个任务,需要一个定时计划 调研了几种方式都不是很理想. 参考,python实现定时任务的8种方式详解 选择使用 apscheduler 库吧 APScheduler简介 APScheduler是Python的一个定时任务框架&#xff0c;用于执行周期或者定时任务&#xff0c;该框架不仅可以…

【数据结构】二叉树遍历的实现(超详细解析,小白必看系列)

目录 一、前言 &#x1f34e;为何使用链式二叉树 &#x1f350;何为链式二叉树 &#x1f349;二叉树的构建 &#x1f4a6;创建二叉链结构 &#x1f4a6;手动构建一颗树 &#x1f353;二叉树的遍历 &#xff08;重点&#xff09; &#x1f4a6;前序遍历 &#x1f4a6;中…

二维码智慧门牌管理系统:提升小区管理的智能化水平

文章目录 前言一、二维码智慧门牌管理系统简介二、精准的门牌定位三、门牌编号优化三、更多特点四、未来展望 前言 随着科技的不断发展&#xff0c;智能化管理已经深入到我们生活的方方面面&#xff0c;而小区作为我们居住的重要场所&#xff0c;智能化管理更是必不可少。为了…

警惕!外贸常见的一些骗局!

随着网络技术和国际支付的普及&#xff0c;外贸汇款骗局也是时常发生&#xff0c;本文将列举外贸汇款骗局的常见套路和风险提示&#xff0c;以帮助广大外贸人更好地护好自己的“钱袋子”。 常见套路 1.钓鱼 出口商与买家的订单已经谈妥&#xff0c;把收款信息通过邮件发给买家…

【重拾C语言】七、指针(二)指针与数组(用指针标识数组、多维数组与指针、数组指针与指针数组)

目录 前言 七、指针 7.1~3 指针与变量、指针操作、指向指针的指针 7.4 指针与数组 7.4.1 用指针标识数组 7.4.2 应注意的问题 a. 数组名是指针常量 b. 指针变量的当前值 c. 数组超界 7.4.3 多维数组与指针 7.4.4 指针数组 a. 指针数组 b. 数组指针 c. 对比总结 前…

bash上下键选择选项demo脚本

效果如下&#xff1a; 废话不多说&#xff0c;上代码&#xff1a; #!/bin/bashoptions("111" "222" "333" "444") # 选项列表 options_index0 # 默认选中第一个选项 options_len${#options[]}echo "请用上下方向键进行选择&am…

【多线程案例】Java实现简单定时器(Timer)

1.定时器&#xff08;Timer&#xff09; 1.什么是定时器&#xff1f; 在日常生活中,如果我们想要在 t 时间 后去做一件重要的事情,那么为了防止忘记,我们就可以使用闹钟的计时器功能,它会在 t 时间后执行任务&#xff08;响铃&#xff09;提醒我们去执行这件事情. — 这就是J…

【数据结构-队列 二】【单调队列】滑动窗口最大值

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【单调队列】&#xff0c;使用【队列】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

Springboot整合Druid:数据库密码加密的实现

ps:Springboot项目&#xff0c;为了防止某些人反编译看到yml里面的数据库密码&#xff0c;对密码进行加密处理&#xff0c;隐藏公钥形式。&#xff08;总有人想扒掉你的底裤看看你屁股长什么样&#xff09; 1.引入依赖&#xff08;以前有依赖就不用了&#xff09; 2.找到Druid…

你想知道的测试自动化-概览篇

测试自动化概念整理 协议 JSON Wire Protocol Specification JSON Wire 协议 现已过时的开源协议的端点和有效负载&#xff0c;它是W3C webdriver的先驱。 devtool协议 Chrome DevTools 协议允许使用工具来检测、检查、调试和分析 Chromium、Chrome 和其他基于 Blink 的浏…

轻松驾驭Hive数仓,数据分析从未如此简单!

1 前言 先通过SparkSession read API从分布式文件系统创建DataFrame 然后&#xff0c;创建临时表并使用SQL或直接使用DataFrame API&#xff0c;进行数据转换、过滤、聚合等操作 最后&#xff0c;再用SparkSession的write API把计算结果写回分布式文件系统 直接与文件系统交…

MyLife - Docker安装Redis

Docker安装Redis 个人觉得像reids之类的基础设施在线上环境直接物理机安装使用可能会好些。但是在开发测试环境用docker容器还是比较方便的。这里学习下docker安装redis使用。 1. Redis 镜像库地址 Redis 镜像库地址&#xff1a;https://hub.docker.com/_/redis/tags 这里是官方…

四向穿梭车智能机器人|HEGERLS托盘式四向穿梭车系统的换轨技术和故障恢复功能

随着物流行业的迅猛发展&#xff0c;托盘四向穿梭式立体库因其在流通仓储体系中所具有的高效密集存储功能优势、运作成本优势与系统化智能化管理优势&#xff0c;已发展为仓储物流的主流形式之一。托盘四向穿梭车立体仓库有全自动和半自动两种工作模式&#xff0c;大大提高了货…

java基础 异常

异常概述&#xff1a; try{ } catch{ }&#xff1a; package daysreplace;import com.sun.jdi.IntegerValue;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.…