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把页面中所有元素的轮廓绘制出来的更多相关文章

  1. 使用HTML5的JS选择器操作页面中的元素

    文件命名为:querySelector.html,可在Chrome浏览器中预览效果. 1 <!DOCTYPE html> 2 <html lang="en"> ...

  2. 在浏览器中使用jquery取得iframe中页面中指定元素的值的不同

    自己使用aspx页面中嵌套了ascx的页面其中使用了iframe的一些内容,出现了同一个页面的两种取值的方式 1. 在iframe的包含页面,需要使用iframe的页面中的元素,是需要使用$(wind ...

  3. 控制使用jquery load()方法载入新页面中的元素

    最近在项目中用到jquery的load()方法来加载页面,首先简单说一下load()方法. load(url,data,callback);该方法接收三个参数,第一个是载入的页面地址,第二个是要传到服 ...

  4. 使用HTML5的JavaScript选择器操作页面中的元素

    <!doctype html><html lang="en"> <head>     <meta charset="UTF-8& ...

  5. JS基础入门篇( 三 )—使用JS获取页面中某个元素的4种方法以及之间的差别( 一 )

    1.使用JS获取页面中某个元素的4种方法 1.通过id名获取元素 document.getElementById("id名"); 2.通过class名获取元素 document.g ...

  6. Jquery如何获得<iframe>嵌套页面中的元素

    DOM方法:父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.documentjq ...

  7. jQuery基础学习5——JavaScript方法获取页面中的元素

    给网页中的所有<p>元素添加onclick事件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  8. Jquery获得子页面中某个元素

    本页面中有子框架iframe1.获取iframe1中元素 $("input[name$='svNo']", window.frames["iframe1"].d ...

  9. JQueryiframe页面操作父页面中的元素与方法(实例讲解)

    1)在iframe中查找父页面元素的方法:$('#id', window.parent.document) 2)在iframe中调用父页面中定义的方法和变量:parent.methodparent.v ...

随机推荐

  1. git-ftp代码部署方式

    虽然如今ci方法已经在很多团队使用了,但对于一些个人性的基于PHP的跑在虚拟主机的小项目,既没有服务端的Git环境,又不想时刻跑一个Genkins,就只能回到原始的FTP上传了. 所幸有了git-ft ...

  2. php框架之odp(一)

    熟悉odp框架的使用已经快一个月了,今天总结一下.odp和yii都是成熟的常用的php框架,因为odp是公司内部开发的,且公司内部用odp的较多,所以我就从odp框架入手.仅仅纪录自己的学习体会 一. ...

  3. c# 使用GDAL处理大图

    注意问题: 1.GDAL 使用官网生成好的dll,必须把Bin目录下的dll一并加到执行目录下去,否则会出错.  2. 用环境变量设置引用路径可以避免一大堆dll放一起.代码如下: /// <s ...

  4. CSS实现响应式全屏背景图

    body { /* 加载背景图 */ background-image: url(images/background-photo.jpg); /* 背景图垂直.水平均居中 */ background- ...

  5. fresco xml配置属性不起作用

    在xml中配置加载等待图标,不起作用. 正确的如下: <?xml version="1.0" encoding="utf-8"?> <Line ...

  6. nginx负载均衡二:配置

    配置方法一(可用): upstream tomcatserver1 { server ; server 192.168.70.172; server 192.168.70.173 down; serv ...

  7. 近5年常考Java面试题及答案整理(二)

    上一篇:近5年常考Java面试题及答案整理(一) 31.String s = new String("xyz");创建了几个字符串对象? 答:两个对象,一个是静态区的"x ...

  8. oracle查看锁表进程,杀掉锁表进程[转载]

    select sess.sid,     sess.serial#,     lo.oracle_username,     lo.os_user_name,     ao.object_name,  ...

  9. python中将图片从客户端(client)推到(POST)到服务器端(server)的方法

    从客户端推json到服务器端的工作可以用flask很容易做到,那么需要推送图片的话可以先将图片存到json中再进行操作. 服务器端 from flask import request, Flask i ...

  10. 关于tomcat7服务下面js无法获取JSESSIONID的cookie信息

    http://tomcat.apache.org/tomcat-5.5-doc/config/context.html Does anyone know what changed in the con ...