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

React中Framer Motion退出动画异常:图片滑块切换方向时动画错误

解决Framer Motion图片滑块反向切换时退出动画异常的问题

问题核心

正如你判断的,问题出在已挂载DOM元素的退出动画配置未随切换方向更新。首次反向切换时,即将退出的元素仍沿用之前的动画参数,导致动画方向与预期相反。

可行解决办法

方案1:通过唯一Key强制元素重新渲染

给每个滑块元素设置包含当前切换方向的key,当方向改变时,React会识别为新元素并重新挂载,从而使用最新的动画配置:

// 假设direction为切换方向状态,值为'up'或'down'
<motion.div
  key={`slide-${currentIndex}-${direction}`}
  initial={{ y: direction === 'down' ? '-100%' : '100%' }}
  animate={{ y: 0 }}
  exit={{ y: direction === 'down' ? '100%' : '-100%' }}
>
  {/* 图片内容 */}
</motion.div>

每次方向变化时,key会同步更新,旧元素将带着新的退出动画参数执行退场动作,不会再出现方向错误。

方案2:利用AnimatePresence的custom属性传递方向

借助AnimatePresence的custom属性将当前方向传递给退出动画,让动画配置动态依赖该参数:

<AnimatePresence custom={direction}>
  <motion.div
    initial={{ y: direction === 'down' ? '-100%' : '100%' }}
    animate={{ y: 0 }}
    exit={(custom) => ({ y: custom === 'down' ? '100%' : '-100%' })}
    key={currentIndex}
  >
    {/* 图片内容 */}
  </motion.div>
</AnimatePresence>

这里退出动画以函数形式存在,接收custom参数(即当前切换方向)并动态计算退场位置,无需重新渲染元素即可实现正确的方向动画,性能更优。

建议优先尝试方案2,若场景存在依赖key的其他逻辑,再选用方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:05:18