覆盖 React Framer Motion 中的过渡延迟

Override the transition delay in React Framer Motion

我创建了 motion.div 组件,其中包含 initialanimatewhileTap 属性:

<motion.button
  initial={'initial'}
  animate={'in'}
  whileTap={'onTap'}
  variants={introButtonVariants}
>...</>

in 变体包含 transitiondelay: 0.5:

in: {
  x: 0,
  scale: 1,
  transition: { duration: 0.5, delay: 0.5 }
}

但是这个 delay: 0.5 正在影响 onTap 变体,即使我在那里明确指定了新的 delay。所以在点击时,它会立即进入“点击”模式,但然后在向后动画之前停止 0.5s.

onTap: {
  scale: 0.8,
  transition: { scale: { delay: 0 } }
}

delay 值如何变为 animate 属性,被新变体中定义的新值覆盖?

遇到了同样的问题,在官方discord中找到了答案。 看起来目前只有展开运算符才能重置动画状态中的延迟。

这是一个工作示例: https://codesandbox.io/s/motion-transition-70yhg?file=/src/App.js

复制粘贴:

const size = 200;
const radius = 40;
const color = "#0CF";
const curve = {
    type: "spring",
    stiffness: 400,
    damping: 30
};

export default function App() {
    const variants = {
        active: { scale: 1.25, transition: { ...curve, delay: 2 } },
        hovering: {
            scale: 1.5,
            rotate: 180,
            transition: { ...curve, delay: 0 }
        }
    };

    return (
        <div className="App">
            <motion.div
                style={{
                    width: size,
                    height: size,
                    backgroundColor: color,
                    borderRadius: radius
                }}
                variants={variants}
                animate={"active"}
                whileHover={"hovering"}
                transition={{ ...curve }}
            />
        </div>
    );
}