回流与重绘,以及解决回流与重绘的办法

回流(重排)一定会触发重绘,重绘不一定会触发回流(重排)。

回流:任何会改变元素几何信息(元素的位置和尺寸大小)的操作,都会触发回流。

(1)添加或者删除可见的 DOM 元素;

(2)元素尺寸改变——边距、填充、边框、宽度和高度

(3)内容变化,比如用户在 input 框中输入文字

(4)浏览器窗口尺寸改变——resize事件发生时

(5)计算 offsetWidth 和 offsetHeight 属性

(6)设置 style 属性的值

(7)当你修改网页的默认字体时。

这个计算的阶段就是回流

重绘:当渲染树中的一些元素需要更新属性,而这些属性只是影响元素的外观、风格,而不会影响布局的操作,比如 background-color,我们将这样的操作称为重绘。如背景颜色发生改变,那么会引起重绘,但是不会引发回流。

解决办法:

使用class代替style,减少style的使用

使用resize、scroll时进行防抖和节流处理,这两者会直接导致回流

使用visibility替换display:none,因为前者只会引起重绘,后者会引发回流

批量修改元素时,可以先让元素脱离文档流,等修改完毕后,再放入文档流

避免触发同步布局事件,我们在获取offsetwidth这类的属性时,可以使用变量将查询结果存起来,避免多次查询,每次对offset / scroll /client等属性进行操作时都会触发回流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这就很Helloworld

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值