动画添加一个框到 React 中的框列表
Animating the addition of a box to a list of boxes in React
我有一排水平的方框,右对齐。我想在右侧添加一个新框,方法是让它逐渐滑入,同时将其他框向左移动。
https://codesandbox.io/s/vibrant-curran-xqcbh?file=/src/App.js 是我得到的地方。这是我的代码:
import { motion, AnimatePresence } from "framer-motion";
import React, { useState } from "react";
import "./styles.css";
export default function App() {
const [texts, setTexts] = useState(["foo", "foo"]);
return (
<div className="m-2">
<button
className="btn btn-primary mb-3"
onClick={() => {
setTexts([...texts, "bar"]);
}}
>
Add box
</button>
<div className="d-flex justify-content-end">
<AnimatePresence initial={false}>
{texts.map((text, i) => (
<motion.div
key={i}
positionTransition
initial={{ x: 100 }}
animate={{ x: 0 }}
transition={{ duration: 2, type: "tween" }}
>
<div className="alert alert-primary mr-2" style={{ width: 100 }}>
{text}
</div>
</motion.div>
))}
</AnimatePresence>
</div>
</div>
);
}
有两个问题:
- 所有现有框向左移动的速度比下一个框快得多。
- 现存的盒子在移动后会出现类似spring的震荡。相反,我希望他们能够平稳地移动到目的地,而不是过度调整和摇摆不定。
对于从这里到哪里去有什么想法吗?
我使用了 framer-motion,但我并不拘泥于它,如果另一个库能让这更容易的话。
只需为 positionTransition 匹配 spring。
const spring = {
duration: 2,
type: "tween"
};
...
positionTransition={spring}
参见示例 https://codesandbox.io/s/kind-mendel-zl1fl?file=/src/App.js
我有一排水平的方框,右对齐。我想在右侧添加一个新框,方法是让它逐渐滑入,同时将其他框向左移动。
https://codesandbox.io/s/vibrant-curran-xqcbh?file=/src/App.js 是我得到的地方。这是我的代码:
import { motion, AnimatePresence } from "framer-motion";
import React, { useState } from "react";
import "./styles.css";
export default function App() {
const [texts, setTexts] = useState(["foo", "foo"]);
return (
<div className="m-2">
<button
className="btn btn-primary mb-3"
onClick={() => {
setTexts([...texts, "bar"]);
}}
>
Add box
</button>
<div className="d-flex justify-content-end">
<AnimatePresence initial={false}>
{texts.map((text, i) => (
<motion.div
key={i}
positionTransition
initial={{ x: 100 }}
animate={{ x: 0 }}
transition={{ duration: 2, type: "tween" }}
>
<div className="alert alert-primary mr-2" style={{ width: 100 }}>
{text}
</div>
</motion.div>
))}
</AnimatePresence>
</div>
</div>
);
}
有两个问题:
- 所有现有框向左移动的速度比下一个框快得多。
- 现存的盒子在移动后会出现类似spring的震荡。相反,我希望他们能够平稳地移动到目的地,而不是过度调整和摇摆不定。
对于从这里到哪里去有什么想法吗?
我使用了 framer-motion,但我并不拘泥于它,如果另一个库能让这更容易的话。
只需为 positionTransition 匹配 spring。
const spring = {
duration: 2,
type: "tween"
};
...
positionTransition={spring}
参见示例 https://codesandbox.io/s/kind-mendel-zl1fl?file=/src/App.js