0

嘿,所以我有一点用 React konva 编写的拖放游戏。我的可拖动部分看起来像这样(为方便起见进行了简化

   return this.props.areas.map((area) => 
        <Image draggable=true 
            {...area.imageProps} 
            onDragStart={() => {...}} 
            onDragEnd={() => {...}} 
            onDragMove={() => {...}}/> ) 

我希望当前被拖动的部分是最高层(最高 zIndex)上的部分。

问题是 React-Konva 不支持 zIndexing,并且似乎希望您根据渲染方法中的顺序强制执行 zIndexing。

我的解决方案是用 currentDragIndex 更新 reactState

 ...<Image 
    onDragStart = {this.setState({currentDragIndex: area.index})} 
     />

然后我尝试在渲染方法中重新排序。但是,这会导致拖动事件被中断。

有人对此有很好的解决方案吗?

4

2 回答 2

2

你应该只使用 moveToTop() 方法

 onDragStart={(el) => {el.target.moveToTop();}}
于 2019-07-02T02:39:22.897 回答
1

如果您有一些项目的数组,最简单的解决方案是通过将拖动节点移动到数组末尾来更改该数组。在您的render函数中,您只需要从数组中绘制项目。

handleDragStart = e => {
    const id = e.target.name();
    const items = this.state.items.slice();
    const item = items.find(i => i.id === id);
    const index = items.indexOf(item);
    // remove from the list:
    items.splice(index, 1);
    // add to the top
    items.push(item);
    this.setState({
      items
    });
};

演示:https ://codesandbox.io/s/11j51wwm3

于 2019-03-09T13:13:49.233 回答