如何减小回流,重绘

1. 直接改变className,若是动态改变样式,则使用cssText(考虑没有优化的浏览器)javascript

// 很差的写法
var left = 1;
var top = 1;
el.style.left = left + "px";
el.style.top = top + "px";// 比较好的写法
el.className += " className1";
 
// 比较好的写法
el.style.cssText += "; left: " + left + "px; top: " + top + "px;";

  

2. 让要操做的元素进行”离线处理”,处理完后一块儿更新css

a) 使用DocumentFragment进行缓存操做,引起一次回流和重绘;
b) 使用display:none技术,只引起两次回流和重绘;
c) 使用cloneNode(true or false) 和 replaceChild 技术,引起一次回流和重绘java

3.不要常常访问会引发浏览器flush队列的属性,若是你确实要访问,利用缓存浏览器

// 别这样写,大哥
for(循环) {
el.style.left = el.offsetLeft + 5 + "px";
el.style.top = el.offsetTop + 5 + "px";
}
 
// 这样写好点
var left = el.offsetLeft,
top = el.offsetTop,
s = el.style; 
for (循环) { 
left += 10; 
top += 10; 
s.left = left + "px"; 
s.top = top + "px"; 
}

4. 让元素脱离动画流,减小回流的Render Tree的规模缓存

//推荐
$("#block1").animate({left:50});
//不推荐
$("#block2").animate({marginLeft:50});
相关文章
相关标签/搜索