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

Framer-motion配置staggerChildren后子元素未产生错开动画效果

Framer Motion staggerChildren 不生效问题修复

问题原因

staggerChildren失效的核心原因是子元素dropUpVariants的visible状态transition中配置了固定delay: .3。
staggerChildren的工作逻辑是父容器触发动画时,自动按子元素顺序给每个子元素的动画延迟叠加索引 * staggerChildren值的偏移量,实现依次错开效果。如果子元素自身transition里写了固定delay值,会直接使用这个固定值,覆盖stagger自动计算的偏移延迟,最终所有子元素都在0.3s后同时执行动画,没有错开效果。

修复方案

  • 移除子元素变体里的固定delay: .3配置
  • 如果需要给整组动画设置统一的启动延迟(即第一个子元素也等待0.3s再开始,后续每个子元素间隔0.5s),把delay: .3移到父容器containerVariants的transition配置中即可

修正后的variants代码

export const containerVariants = {
    hidden: {
        opacity: .6
    },
    visible: {
        opacity: 1,
        transition: {
            delay: .3, // 整组动画统一启动延迟,移到父容器配置
            staggerChildren: 0.5,
            // 可选配置:如果需要父容器自身的opacity动画执行完再触发子元素动画,打开下面一行
            // when: "beforeChildren"
        }
    }
}

export const dropUpVariants = {
    hidden: {
        y: '100vw'
    },
    visible: {
        y: 0,
        transition: {
            type: 'spring', 
            stiffness: 100, 
            mass: .3
            // 移除此处原有的固定delay: .3
        }
    }
}

JSX结构说明

你当前写的JSX结构完全符合要求,不需要做任何调整:父motion容器绑定了容器变体、设置了initial/animate状态,子motion元素绑定了对应子变体,会自动继承父容器的动画状态,满足staggerChildren的生效条件。

补充提示:如果后续需要给某个特定子元素设置单独的额外延迟,可以在对应子元素的transition中用动态计算的延迟写法,不要写所有子元素统一的固定delay值,避免覆盖stagger逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:43:09