下面是张大神张鑫旭的文章.提出个问题.
Demo
...
代码中这一段。
setTimeout(function() {
if (time) element.style.transition = "height "+ time +"ms";
element.style.height = targetHeight;
}, 15);
为什么要setimeout. 去掉就没效果了.. 张大神解释说是需要
触发动画效果需要触发重绘,setTimeout就有这个作用
小弟依然没太明白. 求解释......
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
一方面,CSS样式修改是渲染中的一种高成本操作,所以浏览器一般会缓存渲染树的更新。但有的情况则不会缓存,比如:
调整窗口大小和修改页面默认字体
client/offset/scroll(比如访问
node.clientWidth属性)getComputedStyle()currentStyle另一方面,setTimeout 是要等执行线程空闲的时候才会触发的。
以上是原理。下面看问题:
假设没有
setTimeout,效果成了:结果就是,根本不会渲染高度为
height,而是直接渲染成targetHeight。我们想要的结果是从height到targetHeight的过渡。那有了
setTimeout,效果就是酱紫的了:喏喏,浏览器得先重排高度为
height才闲下来,而一闲下来才要求重排到targetHeight,这才会产生过渡效果。