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

Framer Motion中when:afterChildren属性不生效问题求助

Framer Motion when: "afterChildren" 不生效的解决方案

问题出在你同时给父、子元素都设置了initial="initial"和animate="animate"属性——这会让两个元素各自独立触发动画,父元素的when: "afterChildren"无法感知子元素的动画状态,因为子元素的动画不是由父元素的状态切换驱动的。

要实现子元素动画完成后父元素再启动动画,需要做以下修改:

  • 移除子元素的initial和animate属性,让父元素的状态切换来带动子元素的动画
  • 确保父元素的transition配置中when: "afterChildren"生效

修改后的完整代码:

import React from 'react';
import { motion } from "framer-motion";

function App() {
    const parentVariant = {
        initial: {
            x: '0vw',
        },
        animate: {
            x: '100vw',
            transition: {
                duration: 40,
                when: "afterChildren",
            },
        },
    };

    const childVariant = {
        initial: {
            x: '0vw',
        },
        animate: {
            x: '100vw',
            transition: {
                duration: 40,
            },
        },
    };

    return (
        <div className="App">
            <motion.div
                variants={parentVariant}
                style={{ width: "100px", height: "100px", backgroundColor: "gray" }}
                initial="initial"
                animate="animate"
            >
                <motion.div
                    variants={childVariant}
                    style={{ width: "50px", height: "50px", backgroundColor: "red" }}
                />
            </motion.div>
        </div>
    );
}

export default App;

修改后,父元素切换到animate状态时,会先触发子元素的animate动画序列,等子元素的40秒动画完全结束后,父元素才会开始自身的移动动画,完全符合预期的执行顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:00:01