对于客户,我们正在构建水平拖动的媒体项行。使用 Framer-Motion 水平拖动效果很好,但我无法在单击按钮时为 x 位置设置动画。
这是一般的想法:
这是我目前拥有的组件(为简洁起见,我删除了样式等):
const HorizontalScroll = ({ children }) => {
const x = useMotionValue(0);
function onLeftClick() {
const xPos = x.get();
if (Math.round(xPos) === 0) {
return;
}
const newXPosition = xPos + 600;
x.set(newXPosition > 0 ? 0 : newXPosition);
}
function onRightClick() {
const xPos = x.get();
const newXPosition = xPos - 600;
x.set(newXPosition < -2000 ? -2000 : newXPosition);
}
return (
<>
<button
type="button"
onClick={onLeftClick}
>
Left
</button>
<motion.div
drag="x"
dragConstraints={{ left: -2000, right: 0 }}
initial={false}
style={{ width: 2000, x }}
>
{children}
</motion.div>
<button
type="button"
onClick={onRightClick}
>
Right
</button>
</>
);
};
所以当我x.set()
在箭头上单击左或右时我会这样做。做x.set()
作品,但它不是动画。
而不是const x = useMotionValue(0)
我可以使用useSpring
or useTransform
,但这会破坏拖动行为。
所以简而言之,我想为 制作动画x.set()
,但我不知道该怎么做。有人有想法吗?