我正在尝试创建一个动画,以便使用React将子元素从一个父元素移动到另一个父元素。
用户应该能够单击一个元素,然后将其移到另一个div中。
我制作了一个简单的演示组件(没有动画)来说明我的意思。单击元素后,状态会更新,并且元素会在正确的位置重新呈现。
class App extends React.Component { state = { list: ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank'], top: [0, 1, 2], bottom: [3, 4, 5] } moveDown = (item) => { let { top, bottom } = this.state this.setState({ top: top.filter(x => x !== item), bottom: [...bottom, item] }) } moveUp = (item) => { let { top, bottom } = this.state this.setState({ top: [...top, item], bottom: bottom.filter(x => x !== item) }) } render() { let { top, bottom, list } = this.state return ( <div style={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between', alignItems: 'center', height: '90vh', width: '100%' }}> <div> {top.map((item) => <div onClick={() => this.moveDown(item)} style={{color:'red'}}>{list[item]}</div> )} </div> <div> {bottom.map((item) => <div onClick={() => this.moveUp(item)} style={{color:'green'}}>{list[item]}</div> )} </div> </div> ) } }
Codepen演示:https://codepen.io/ee92/pen/LqrBjL ? editors = 0010
非常感谢并感谢您对如何实现此div-div动画的任何帮助或建议。
不,那不可能
无法以这种方式进行动画处理,因为DOM认为您要先删除a div然后再添加new div。即使与div您相同,DOM也没有该上下文。动画是通过更改CSS(而不是HTML)来控制的。
div
…但是这是怎么做的
如果您实际上需要两个列表都保留在不同的divs中,那么您可以执行以下操作之一:
old item
new item
相同的概念,两种实现方式。
我修改了您现有的示例,以显示选项2 的 简化 版本。请注意,要做出许多动画决定,例如列表变小时会发生什么,项目应如何从红色变为绿色等,而我没有不要试图客观地解决它们。同样,如果您可以将item两个列表的所有s都放在一个div中并控制它们的位置,则将容易得多absolute。但是如果他们需要结束于单独div的…
item
absolute
https://codepen.io/sallf/pen/VgBwQr?editors=0010
这是怎么回事
transition
.item
transform
transition.item
transition.startTop
y
transition.startAnim
setTimeout
0