今天结合项目说下重绘和回流。
公司代码有个bug是这样的:页面整体分为三部分,页面上面横向并排两个容器,页面下方是个表格。页面上方两个容器中图形都是用Highcharts画的,但是页面重绘导致其中一个图形在第二次回流时超出了容器边界。这个问题我折腾了大半天都没找到根源。最后才发现是下方表格由于有多余的边框,有段js逻辑代码是这样写的:
function ClearBorderRight(source) {
$("#" + source + "_unlockheadersbody").find("tr").each(function () {
$(":last-child").css("border-right", "0");
});
}
这段代码直接导致了页面二次回流,使得DOM发生变化,图形冲破容器。
下面我将详细分析造成重绘和回流的原因,首先我们先认识什么叫重绘和回流。
一、回流和重绘基本概念
这个系列的第一篇文章详细介绍了浏览器相关的原理,建议大家先看看。前端进阶(一)浏览器运行原理
1、回流