请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请问老师现代浏览器关于回流

请问一下老师是不是现代浏览器对于回流的问题已经自己做了优化,我在chrome88版本下这段代码并没有看到每次都触发了回流重新paint。而是都是最后才进行的paint

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .app {
      /* will-change: transform; */
      width: 300px;
      height: 300px;
      background-color: red;
      /* animation: wang 2s infinite; */
    }

    @keyframes wang {
      from {
        transform: translate(0);
      }

      to {
        transform: translate(100px);
      }
    }
  </style>
</head>

<body>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>
  <div class="app"></div>


  <script>
    const divs = document.getElementsByClassName('app')
    const update = () => {
      for (let div of divs) {
        console.log(div, 'div')
        div.style.width = div.offsetTop * Math.random() + 'px'
      }
      window.requestAnimationFrame(update)
    }
    window.addEventListener('click', () => {
      update()
    })
  </script>
</body>

</html>

图片描述

正在回答

1回答

同学你好!

对应问题进行一下更正,

这里rAF进行了调度,每次重绘前安排进行了一些重新布局。


1 回复 有任何疑惑可以回复我~
  • 提问者 hy_wang #1
    老师可以详细讲一讲吗,我不是很明白为什么把requestAnimationFrame防抖和回流放在一起讲。
    回复 有任何疑惑可以回复我~ 2021-02-02 23:11:52
  • 提问者 hy_wang #2
    layout thrashing,布局抖动老师我理解是说,页面因为访问offsetTop和设置width不停的计算layout(layout是全局的)所以非常耗时,可是老师这为什么叫做抖动,它并不会造成页面抖动啊。以及即使做了requestAniamtionFrame防抖那么仍然是会每次渲染前进行forced reflow啊。老师这个概念应该如何理解呢
    回复 有任何疑惑可以回复我~ 2021-02-02 23:24:49
  • 提问者 hy_wang #3
    老师我理解的是布局抖动是说连续不段的layout计算导致多次强制回流(因为每次实时属性的访问导致浏览器不得不重新计算而不能合并多次的layout变为一次),可是这个和requestAnimatonFrame这个API我认为没有关系呀。她们之间有什么联系吗,因为是在想搞懂这些~有点啰嗦希望老师谅解。。
    回复 有任何疑惑可以回复我~ 2021-02-02 23:28:49
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信