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

Framer Motion退出动画失效求助:元素移除DOM时无动画效果

Framer Motion exit动画不触发的原因及解决方法

Framer Motion的exit动画不会自动生效,核心原因是必须用AnimatePresence组件包裹需要触发退出动画的元素——它负责追踪元素的挂载/卸载状态,没有它的话,元素被移除时Framer Motion根本不知道要执行退出动画。

另外还要满足两个关键条件:

  • 被包裹的motion元素必须设置唯一的key属性,让Framer Motion能精准识别每个元素的状态变化
  • 元素的卸载必须通过条件渲染(比如{isVisible && <motion.div />})实现,不能用display: none这类仅隐藏元素的方式

修改后的代码示例

import { motion, AnimatePresence } from "framer-motion";

// 假设用状态控制元素显示/隐藏
const [isVisible, setIsVisible] = useState(true);

return (
  <AnimatePresence>
    {isVisible && (
      <motion.div 
        key="unique-content-key" // 必须设置唯一key
        initial={{opacity: 0, y: -500}} 
        animate={{opacity: 1, y: 0, scale: 0.9}} 
        exit={{opacity: 0, y: -500}}
      >
        Very Code...
      </motion.div>
    )}
  </AnimatePresence>
);

你之前用useRef的.mount()方法没用,因为exit动画的触发完全依赖AnimatePresence提供的上下文,手动挂载/卸载元素绕开了这个机制,自然不会触发动画。

内容的提问来源于stack exchange,提问作者Yeider Peña

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:22:32