用canvas把页面中所有元素的轮廓绘制出来
    function plot(){//绘制函数
        // 创建一个canvas画布
        const canvas=document.createElement("canvas");
        canvas.width=document.documentElement.offsetWidth;
        canvas.height=document.documentElement.offsetHeight;
        canvas.style.position='absolute';
        canvas.style.left="0";
        canvas.style.right="0";
        canvas.style.top="0";
        canvas.style.bottom="0";
        canvas.style.zIndex="99999";
        // 将画布添加到文档中
        document.body.appendChild(canvas);
        const ctx=canvas.getContext('2d');
        draw(ctx,getAllRects());
    }
    function draw(ctx,rects){
        let i=0;
        ctx.strokeStyle="red";
        window.requestAnimationFrame(_draw);//浏览器重绘前执行一下
        function _draw(){
            let{x,y,width,height}=rects[i++];
            ctx.strokeRect(x,y,width,height);
            if(i<rects.length){
                window.requestAnimationFrame(_draw);//1s重绘60次
            }else{
                console.log('dom元素遍历完了');
            }
        }
    }
    function getAllRects(){//获取页面内所有元素的函数,返回一个数组
        const allElements=document.querySelectorAll("*");//页面内所有元素
        const rects=[];
        const {x:htmlX,y:htmlY}=document.documentElement.getBoundingClientRect();//返回元素盒信息{x:x坐标,y:y坐标,width:宽度,height:高度}
        allElements.forEach(element => {
            const eachELRects=Array.from(element.getClientRects()).filter(rect=>{
                return rect.width||rect.height;
            }).map(rect=>{
                return {
                    x:rect.x-htmlX,
                    y:rect.y-htmlY,
                    width:rect.width,
                    height:rect.height
                }
            })
            rects.push(...eachELRects);
        });
        return rects;
    }
    plot();  
用canvas把页面中所有元素的轮廓绘制出来的更多相关文章
- 使用HTML5的JS选择器操作页面中的元素
		
文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> ...
 - 在浏览器中使用jquery取得iframe中页面中指定元素的值的不同
		
自己使用aspx页面中嵌套了ascx的页面其中使用了iframe的一些内容,出现了同一个页面的两种取值的方式 1. 在iframe的包含页面,需要使用iframe的页面中的元素,是需要使用$(wind ...
 - 控制使用jquery load()方法载入新页面中的元素
		
最近在项目中用到jquery的load()方法来加载页面,首先简单说一下load()方法. load(url,data,callback);该方法接收三个参数,第一个是载入的页面地址,第二个是要传到服 ...
 - 使用HTML5的JavaScript选择器操作页面中的元素
		
<!doctype html><html lang="en"> <head> <meta charset="UTF-8& ...
 - JS基础入门篇( 三 )—使用JS获取页面中某个元素的4种方法以及之间的差别( 一 )
		
1.使用JS获取页面中某个元素的4种方法 1.通过id名获取元素 document.getElementById("id名"); 2.通过class名获取元素 document.g ...
 - Jquery如何获得<iframe>嵌套页面中的元素
		
DOM方法:父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.documentjq ...
 - jQuery基础学习5——JavaScript方法获取页面中的元素
		
给网页中的所有<p>元素添加onclick事件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
 - Jquery获得子页面中某个元素
		
本页面中有子框架iframe1.获取iframe1中元素 $("input[name$='svNo']", window.frames["iframe1"].d ...
 - JQueryiframe页面操作父页面中的元素与方法(实例讲解)
		
1)在iframe中查找父页面元素的方法:$('#id', window.parent.document) 2)在iframe中调用父页面中定义的方法和变量:parent.methodparent.v ...
 
随机推荐
- bootstrap 3.0 LESS源代码浅析(一)
			
我一直以为Bootstrap的LESS源代码精髓在mixins.less,所以这个系列主要也是讲解mixins.less的. 什么是mixins? 混入,或者翻译成混合.官网的说法是:我们可以定义一些 ...
 - 国内AR行业现状研究之百度的AR
			
AR(Augmented Reality),中文翻译增强现实.按我原来的知识体系,VR/AR的技术构成是相同的,只是追求的方向不同.VR是虚拟笼罩现实.让虚拟就是现实:AR则让虚拟进入现实.二者最终看 ...
 - .Net  Reactor 单个dll或exe文件的保护
			
.Net Reactor配置如下: 点一下“Protect”能执行成功,就说明配置没问题.然后保存配置文件,在vs插件上就可以直接读取使用了. vs插件配置
 - C#操作Word Aspose.Words组件介绍及使用—基本介绍与DOM概述
			
1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...
 - 【代码审计】XYHCMS V3.5任意文件读取漏洞分析
			
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
 - js添加事件处理程序
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 查询Array中确定数值的对象&JS linq使用 = linq.js
			
var x=new Array(); x.push({"a":3,"b":3},{"a":2,"b":2},{" ...
 - Socket 服务端使用多线程实现多客户端通讯实例
			
socket通信原理 Java多线程实现Socket通讯 1.服务端 import java.io.IOException; import java.net.ServerSocket; import ...
 - Django model中设置多个字段联合唯一约束
			
Django中model部分的写法, 参见 unique-together 部分文档. class MyModel(models.Model): field1 = models.CharField(m ...
 - Ubuntu 配置vsftpd实现FTP服务器
			
0.vsftpd是啥玩意 都不知道安装了个啥东西,那就没意思了,所以先去了解下什么是vsftpd.vsftpd意思为“very secure FTP daemon(非常安全的FTP进程)”,当然只有更 ...