关于opacity触发paint的问题

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        #react {
            position: relative;
            width: 100px;
            height: 100px;
            background-color: red;
            opacity: 1;
            transform: translateZ(0)
        }
    </style>
</head>

<body>
    <div id="react"></div>
    <script type="text/javascript">
        setTimeout(() => {
            document.getElementById("react").style.opacity = "0"
        }, 2000);
    </script>
</body>
</html>

图片描述

已经用translteZ提升为合成层,改变opacity仍然出触发paint这是为什么,和认知好像有点不符

阅读 1.5k
1 个回答

透明度值的变化是不会引发 paint 的,但是从 opacity: 1;opacity: 0; 不是数值变化那么简单,是有透明和没有透明的关系,这个差距可是很大的。你想想一下,假设页面没有 1 行 js 代码, 则 js 解析,执行这个过程完全不会发生,我们可以做优化,直接连 js 引擎都不加载。所有,从无到有和从 1到100之间的差距可不单单是数值的变化那么简单。

如果你一开始将 opacity 的初始值设为 0.9,然后在通过 js 改为 0,此时你就会发现 paint 事件消失了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题