渐进式渲染时首屏内容被二次重绘怎么办?
我在用骨架屏做渐进式渲染时遇到个问题,当真实内容加载完成替换骨架屏时,页面会出现明显闪烁。比如下面这个商品卡片:
<div class="skeleton">
<div class="img-loader"></div>
<div class="text-loader"></div>
</div>
<div class="product" style="display:none">
<img src="product.jpg">
<h3>商品标题</h3>
</div>
我尝试用JavaScript动态切换显示,但发现当元素从隐藏变为显示时,整个卡片会突然跳动。即使设置了相同宽高,为什么还会触发重排?有没有更好的实现方式避免这种视觉跳跃?
visibility替代display,避免触发重排,代码如下:用
visibility:hidden和opacity做过渡,等图片加载完成再切换显示状态,避免闪烁和跳动。记得给图片加个onload事件,确保内容加载完成后再做切换。