未完待续,当前为草稿版本
布局-> 绘制重新到屏幕
- 实际情况下,布局和绘制到屏幕会多次发生,涉及chonghuihechongpai reflow:布局阶段重新发生 重排 repaint:绘制阶段重新发生 chonghui
哪些行为导致reflow 和 repaint?
- JS 行为
- 修改 DOM,增减dom节点,渲染书发生变化,计算渲染书上节点的信息
- 修改 css
- 用户行为
- 滚动页面
- resize/浏览器窗口变化
- 输入框内容变化
- hover 变化
浏览器缓存dom修改操作
var foo = document.getElementById('foo')
foo.style.color = 'blue'
foo.style.marginTop = '30px'
``
```JavaScript
var foo = document.getElementById('foo')
foo.style.color = 'blue'
var margin = parseInt(style.margin.marginTop)
foo.style.marginTop = (margin + 10) + 'px'
读取脏节点的属性:立刻执行一次reflow 或 repaint,来获取元素最近的信息 常见优化手段
- 避免对同一个DOM节点的read 和write 操作交叉进行
- 在DOM 树外操作DOM,使用 document fragment
- 使用 position:absolute 或 fixed 的元素创建动画 脱离文档流,在此类元素上进行修改,不会触发普通文档流中 dom节点的reflow 和repaint,减少了reflow 和 repaint 的范围
- requestAnimationFrame ??
- Virtual DOM
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end
st->op->cond
cond(yes)->e
cond(no)->op