Framer Motion问题:已添加key但元素退出时仍在屏幕中心短暂闪烁
解决DOM元素退出动画闪烁偏移的问题
针对你遇到的进入动画正常、退出时元素短暂偏移闪烁的问题,核心原因是退出动画执行时元素过早脱离文档流引发布局重排,以下是具体的修复方案:
保持退出动画期间的布局占位
不要在退出动画初始阶段就设置display: none,改用opacity、height、padding等属性的过渡实现视觉隐藏+平滑收缩,避免布局突然塌陷:/* 修正后的退出动画类 */ .fade-exit { opacity: 1; height: auto; padding: 1rem; transition: all 0.3s ease; will-change: opacity, height; /* 提前告知浏览器准备动画 */ } .fade-exit-active { opacity: 0; height: 0; padding: 0 1rem; overflow: hidden; }匹配动画时长与组件卸载时机
如果你用了CSSTransition这类动画库,务必让timeout值和CSS过渡时长完全一致,确保动画执行完毕后再移除DOM元素:<CSSTransition key={item.id} // 确保key是元素唯一标识,别用index timeout={300} // 和CSS里的0.3s对应 classNames="fade" unmountOnExit > {/* 你的列表项元素 */} </CSSTransition>排查key的有效性
确认你的key是每个元素独有的稳定标识(比如数据的id字段),绝对不要用数组索引当key——索引会随列表变化而改变,导致组件复用逻辑混乱,间接引发动画异常。
内容的提问来源于stack exchange,提问作者HelveticaGoodTime
相关产品推荐
相关产品推荐

