用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 ...
随机推荐
- Java中内存溢出与内存泄露
内存溢出 内存溢出(out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给他存了long才能存下的数,就会发 ...
- talk 1
话转偏锋 让别人可以接话, 同时可以设计转换到的话题, 把"谈话带到正确的轨道", 就像下象棋一样, 要看三步 A: 很喜欢看篮球比赛, 对B说 我每次都堵湖人队会赢 B: 篮球最 ...
- FDDI即光纤分布式数据接口
光纤分布式数据接口它是于80年代中期发展起来一项局域网技术,它提供的高速数据通信能力要高于当时的以太网(10Mbps)和令牌网(4或16Mbps)的能力.FDDI标准由ANSI X3T9.5标准委员会 ...
- 使用InstallAnywhere7.1制作Java exe程序安装包
[转[使用InstallAnywhere7.1制作Java exe程序安装包 使用InstallAnywhere7.1制作Java exe程序安装包 对于已经完成的Java应用程序开发项目,从商业化角 ...
- ABBYY PDF Transformer+系统要求
ABBYY PDF Transformer+是一个新的,全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...
- 用Physijs在场景中添加物理效果
1.创建可用Physijs的基本Three.js场景 创建一个可用Physijs的Three.js场景非常简单,只要几个步骤即可.首先我们要包含正确的文件, 需要引入physi.js文件.实际模拟物理 ...
- MySQL常见错误码及说明
1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败<=================可以忽略1008:数据库不存在,删除数据库失败<=========== ...
- U3D常用题
最先执行的方法是:1.(激活时的初始化代码)Awake,2.Start.3.Update[FixUpdate.LateUpdate].4.(渲染模块)OnGUI.5.再向后,就是卸载模块(TearDo ...
- jquery.validate 验证记录
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...
- [原]Jenkins(十四)---jenkins示例:admin管理所有项目,新建用户只能看部分项目
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horiz ...