I got framer motion to animate smoothly based on className, but when I take the values of those class names and set them explicitly in Animate, they no longer animate smoothly.
我得到了基于类名称的流畅动画的框架运动,但当我获取那些类名的值并将它们显式地设置在Animate中时,它们不再流畅地动画。
As you can see, I took the values that the tailwind classnames were providing, and tried to add them to a Variants object. Whereas swapping the classnames resulted in smooth transitions, setting them via props jumps around.
如您所见,我获取了顺风类名称提供的值,并尝试将它们添加到Variants对象中。而交换类名则会导致平稳的过渡,而通过道具设置它们则会跳来跳去。
works:
作品:
const containerStyle = ` ${isMaximized ? 'fixed inset-0' : ' aspect-[16/9]'}`;
const motionDivStyle = isMaximized ? 'h-screen w-screen' : 'h-full';
return (
<div className="aspect-[16/9]">
<AnimatePresence>
<div className={containerStyle} onClick={() => {
setIsMaximized(!isMaximized)
}}>
<motion.div
whileHover={{ cursor: 'pointer' }}
layout
transition={trans}
className={`${message[i]} ${motionDivStyle}`}
>
<motion.div layout="position">hello</motion.div>
</motion.div>
</div>
</AnimatePresence>
</div>
);
};
does not work:
不起作用:
const variants: Variants = {
maximized: {
position: 'fixed',
inset: '0px',
aspectRatio: 'auto'
},
minimized: {
position: 'static',
inset: 'auto',
aspectRatio: '16/9'
}
}
return (
<div className="aspect-[16/9]">
<motion.div onClick={() => {
setIsMaximized(!isMaximized)
}}
transition={trans}
initial={'minimized'}
variants={variants}
animate={isMaximized ? 'maximized' : 'minimized'
}
>
更多回答
优秀答案推荐
我是一名优秀的程序员,十分优秀!