首页 > 其他分享 >前端水印

前端水印

时间:2024-06-18 15:45:29浏览次数:20  
标签:style container 前端 canvas 水印 water true

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div id="content" style="padding:10px;">
    <h2>防删文字水印</h2>
    水印内容不可删除,如检测到被删除,会重新添加水印
</div>
<script>
    function add_water_canvas(){
        //水印canvas
        var water_canvas = document.createElement("canvas");
        water_canvas.id = "water_canvas";
        water_canvas.height = 100;
        water_canvas.width = 300;
        water_canvas.style.top = 100 + "px";
        water_canvas.style.left = 100 + "px";
        water_canvas.style.position = "absolute";
        water_canvas.style.transform = "rotate(-45deg)";
        //水印内容
        var water_text = water_canvas.getContext("2d");
        water_text.font = "26px 黑体";
        water_text.fillText("这里是水印内容", 30, 50);
        //canvas容器:水印目标
        var canvas_container = document.getElementById("content");
        canvas_container.style.height =  280 + "px";
        canvas_container.style.width = 500 + "px";
        // canvas_container.style.backgroundImage = "url(./public/forbidden.png)";
        //添加水印canvas给目标div
        canvas_container.appendChild(water_canvas);
    }
    add_water_canvas();
    var observer = new MutationObserver(function(mutations){
        mutations.forEach(function(mutation){
            if(mutation.removedNodes.length > 0 && mutation.removedNodes[0].id == "water_canvas") {
                console.log("检测到水印被删除,已重新添加水印");
                //重新添加水印
                add_water_canvas();
            }
            if (mutation.type == "attributes" && mutation.target.id == "water_canvas") {
                console.log("检测到水印属性被修改,已重置属性");
                water_canvas.style.display = "block";
                water_canvas.style.opacity = 1;
            }
        });
    });
    observer.observe(document.body, {
        childList: true,
        attributes: true,
        subtree: true,
        attributesOldValue: true,
        characterData: true,
        characterDataOldValue: true,
    });
</script>
</body>
</html>

标签:style,container,前端,canvas,水印,water,true
From: https://www.cnblogs.com/ExcellentDavid/p/18254472

相关文章

  • 【前端面经】数组算法题解
    目录题目一:两数之和题目二:最长无重复字符子串题目三:合并两个有序数组题目四:寻找数组中的峰值题目一:两数之和描述:给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。......
  • 前端面试题日常练-day75 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末在Sass中,以下哪个功能用于生成带有浏览器前缀的CSS属性?a)@extendb)@mixinc)@importd)@includeSass中的函数(Function)用于什么目的?a)执行数学计算b)定义样式块c)导入外部文件d)引用父级选择器......
  • JS 前端动态引用 js 、 css 文件
    JS前端动态引用js、css文件 letjsArrPath=['/web_config_other.js','/web_point.js']letcssArrPath=[]consthead=document.getElementsByTagName("head")[0];jsArrPath.forEach(jsPath=>{letscriptElement=document......
  • IT入门知识第五部分《前端开发》(5/10)
    目录引言介绍前端开发的重要性网页技术的演变现代前端开发的特点1.前端技术概述定义前端开发前端开发的主要职责前端开发与用户体验的关系1.1前端开发的重要性用户界面和交互的重要性响应式设计的需求1.2前端开发的核心技能熟悉Web标准和最佳实践跨浏览器兼容......
  • 作为后端开发工程师,到底要不要学前端
    虽然Java程序员面试时基本不会出现前端相关问题,但是在企业中,往往需要前后端程序员配合完成工作。会一些前端,不仅可以提高你们的协作效率,还能提高自己对整个项目的了解和掌控力,甚至能独立开发出一个完整项目!这点也是能给面试加分的。#知识HTMLCSSJavaScriptAjaxVue#学......
  • 前端使用 Konva 实现可视化设计器(16)- 旋转对齐、触摸板操作的优化
    这一章解决两个缺陷,一是调整一些快捷键,使得Mac触摸板可以正常操作;二是修复一个Issue,使得即使素材节点即使被旋转之后,也能正常触发磁贴对齐效果,有个小坑需要注意。请大家动动小手,给我一个免费的Star吧~大家如果发现了Bug,欢迎来提Issue哟~github源码gitee源码示例地址......
  • 【免费工具】小红书笔记下载器|批量无水印|绿色免费版
    小红书笔记下载器,让你的学习和搬运更轻松!......
  • 前端JS必用工具【js-tool-big-box】学习,打开全屏和关闭全屏
    这一小节,我们说一下js-tool-big-box工具库中,打开全屏和关闭全屏的方法学习。我们知道,浏览器想打开全屏,按一下F11键就可以了,但一来这个功能不一定所有使用的用户都知道,二来在一些例如大屏的需求场景下,还是很被需要的。很多用户一旦投屏展示后,他那个大屏幕就在那里给用户展......
  • pdf代码添加水印
    一段自写的pyhton代码,用于给pdf文件添加水印,参考了网上搜来的代码(原文说是转载的,图片是一段英文和Chicago图片,文字中文翻译过来就”有谁怀疑靓靓国是一切都有可能的地方,怀疑其初创者是否仍活在这个时空,是否怀疑其民主的原力,这图就是明证。咋一看这是靓国自产的小迷糊或靓粉写的码,......
  • 前端菜鸡流水账日记 -- git管理工具(多版本)
    哈喽哇,我又又又来了,其实之前就挺想进行一篇关于git管理工具的分享的,但是一直都没有来的及,直到今天,在学习的时候,,一个朋友新发现了一个vscode中的小插件,所以我就决定一起来分享出来吧,包括我自己也在使用的哦,超级推荐~Sourcetree:是一个这样的软件,真的使用起来超级简单智能,下载完......