【问题标题】:Framer Motion Animate Presence without conditional rendering无条件渲染的 Framer Motion 动画存在
【发布时间】:2022-01-11 14:24:25
【问题描述】:

我有以下使用成帧器运动的 React 飞出导航组件。每个导航项都会多次使用该组件。

有没有其他方法可以在没有条件渲染 (SEO) 的情况下触发此动画?使用key 将不起作用,因为我需要默认隐藏它,并且仅在isActive 等于true 时才可见。

<AnimatePresence initial={false}>
    {isActive && (
        <FlyOutWrapper exit={{ opacity: 0 }} transition={{ duration: 0.2 }}>
            <FlyOutContent
                initial={{
                    x: "5rem",
                    opacity: 0,
                }}
                animate={{
                    x: 0,
                    opacity: 1,
                }}
                transition={{ duration: 0.3 }}>
                <Content>{title}</Content>
            </FlyOutContent>
            <FlyOutBackground
                initial={{ y: "-100%" }}
                animate={{ y: 0 }}
                transition={{ duration: 0.3 }}
            />
        </FlyOutWrapper>
    )}
</AnimatePresence>

【问题讨论】:

    标签: javascript reactjs framer-motion


    【解决方案1】:

    如果您不希望它离开 DOM,那么您根本不需要使用 AnimatePresence。相反,您可以根据isActive 状态为位置(和不透明度等)设置动画。您可以使用variants 或直接在属性之间切换。

    示例(无变体):

    <FlyOutBackground
        initial={{ y: "-100%" }}
        animate={{ y: isActive ? 0 : "-100%" }}
        transition={{ duration: 0.3 }}
    />
    

    使用变体的示例:

    const bgVariants = {
        visible: {
            y: 0
        },
        hidden: {
            y: "-100%"
        }
    }
    
    <FlyOutBackground
        variants={bgVariants}
        initial="hidden"
        animate={isActive ? "visible" : "hidden"}
        transition={{ duration: 0.3 }}
    />
    

    【讨论】:

    • 我希望组件以不同的方式进入而不是离开 - 从上到下进入并在退出时淡出 - 使用您的方法仍然可能,因为目前它似乎是相同的过渡进入和退出但相反。
    • 是的,你只需要定义另一个变体来制作动画,并且可能需要一个更复杂的状态来确定哪个应该是当前变体,但概念是一样的。
    猜你喜欢
    • 1970-01-01
    • 2022-06-22
    • 2022-01-15
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 2021-08-24
    相关资源
    最近更新 更多