You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中Framer Motion模态框退出动画失效问题求助

模态框退出动画失效的排查方案

1. 调整AnimatePresence的mode属性

默认mode="wait",若父组件存在条件渲染或卸载逻辑,可能导致AnimatePresence无法追踪子元素的退出状态。显式设置mode="popLayout",保证动画完成后再移除DOM节点:

<AnimatePresence mode="popLayout">
  {isOpen && <Modal key="modal" />}
</AnimatePresence>

2. 验证退出动画变体的正确性

确保motion组件的exit配置是有效的动画对象,不要遗漏过渡时长或写错属性:

const modalVariants = {
  enter: { opacity: 1, scale: 1 },
  exit: { opacity: 0, scale: 0.8, transition: { duration: 0.3 } }
};

<motion.div
  variants={modalVariants}
  initial="exit"
  animate="enter"
  exit="exit"
>
  {/* 模态框内容 */}
</motion.div>

3. 排查强制卸载逻辑

检查关闭模态框时,是否存在除setIsOpen(false)之外的卸载操作——比如父组件的条件渲染依赖多状态联动,或其他逻辑直接移除了模态框组件。

4. 确保背景层的动画配置正确

若背景层是独立的motion元素,必须给它添加exit动画,且和模态框一起被包裹在AnimatePresence内。注意每个motion元素需要独立的key:

<AnimatePresence>
  {isOpen && (
    <>
      <motion.div 
        key="backdrop" 
        exit={{ opacity: 0 }} 
        initial={{ opacity: 0 }} 
        animate={{ opacity: 1 }}
      />
      <motion.div key="modal" exit={/* 你的退出动画 */} />
    </>
  )}
</AnimatePresence>

或者将背景和模态框放入同一个motion.div容器中,统一配置动画。

5. 检查React.StrictMode的影响

开发环境下,React.StrictMode的双重渲染可能干扰Framer Motion的动画检测逻辑。可暂时关闭StrictMode测试是否恢复正常。

6. 升级Framer Motion版本

部分旧版本(如v4之前)存在AnimatePresence的兼容性bug,建议升级到最新稳定版:

npm install framer-motion@latest

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:55:22