Skeleton动画在内容加载完成后为什么会突然消失而不是平滑过渡?
我在用Skeleton动画做加载占位时遇到个问题,动画骨架在真实内容加载出来后直接消失了,没有之前设置的0.3秒渐隐效果。我检查过CSS过渡属性明明写对了,代码是这样的:
// 数据加载完成后
document.querySelector('.skeleton').style.opacity = 0;
setTimeout(() => {
document.querySelector('.skeleton').style.display = 'none';
}, 300);
虽然加了setTimeout等了300ms,但实际效果还是感觉突兀。是不是display:none触发了布局重置?或者应该用别的方式控制显隐?试过把display改成visibility也不行…
opacity是改了,但你这 JS 是同步改的,浏览器根本没来得及做动画就被你直接设成 0 了。要让 CSS 过渡生效,得先让元素处于一个可见状态,再触发样式变化。你现在是直接就设成
opacity: 0,浏览器一看:哦你一开始就不要我显示了,那我还过渡个锤子。你可以这样改:
然后你的 CSS 要加个
fade-out类:这样浏览器就会从
opacity: 1平滑过渡到0,等动画播完再用display: none隐藏就不会突兀了。拿去改改,有问题再来找我。
display:none确实会直接把元素从布局中移除,导致过渡效果失效。建议用visibility:hidden配合opacity来实现平滑过渡,但只改这一个可能还不够。试试下面这个方案,我之前用过,复制过去试试:
关键是
visibility和opacity一起用,这样既能保持布局不塌,又能有渐隐效果。如果还是不行,可能是其他地方的CSS冲突了,检查下有没有覆盖掉transition属性。