Framer Animation退出动画失效求助(含AnimatePresence代码)
以下是针对你遇到的退出动画不生效问题的排查方向:
确保AnimatePresence持续挂载
AnimatePresence必须始终存在于DOM中,不能随modalOpen的状态变化被条件渲染。你的代码中AnimatePresence作为外层容器是正确的,但要确认它的父组件不会在弹窗关闭时触发重新渲染导致AnimatePresence被卸载。检查exit动画的transition配置
你在exit属性内单独设置了transition,但如果全局transition或animate中的transition与exit配置冲突,可能导致动画不执行。可以尝试简化配置,比如:exit={{ y: "50%", opacity: 0 }} transition={{ duration: 0.3, ease: "easeInOut" }} // 或者直接在exit中明确完整配置 exit={{ y: "50%", opacity: 0, transition: { duration: 0.5, ease: "easeInOut" } }}测试时建议缩短duration(比如0.5s),避免因时长太长误以为动画未执行。
确认状态更新逻辑
点击关闭按钮时,setModalOpen(false)必须正确触发React状态更新,确保modalOpen从true变为false,从而移除motion.div组件。可以在组件内添加console.log(modalOpen)确认状态变化是否正常。排查父元素样式干扰
弹窗的父容器如果设置了overflow: hidden、display: none或position: static等样式,可能会截断或隐藏退出动画。检查父容器的CSS属性,确保动画执行时元素能正常展示过渡效果。验证key的稳定性
你设置的key="boxid"是固定值,对于单个弹窗实例是合理的,但要确保当modalOpen状态切换时,该key对应的组件是被移除而非修改。如果存在多个弹窗场景,需要为每个实例分配唯一key。
内容的提问来源于stack exchange,提问作者Inzen

