Реагируйте на изменение конвы zIndex при перетаскивании - PullRequest
0 голосов
/ 09 марта 2019

Привет, у меня есть небольшая игра с перетаскиванием, написанная на React konva.Моя перетаскиваемая фигура выглядит так (упрощено для удобства

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

. Мне бы хотелось, чтобы фигура, которая в данный момент перетаскивается, была на верхнем слое (самый высокий индекс zIndex).

Проблема в том,React-Konva не поддерживает zIndexing и, похоже, хочет, чтобы вы применяли zIndexing на основе порядка в методе рендеринга.

Мое решение состояло в том, чтобы обновить responseState с помощью currentDragIndex

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

Затем я пытаюсь изменить порядок в методе рендеринга, однако это приводит к прерыванию события перетаскивания.

У кого-нибудь есть для этого хорошее решение?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Если у вас есть массив некоторых элементов, самое простое решение - изменить этот массив, переместив перетаскивающий узел в конец массива. В вашей функции 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

0 голосов
/ 02 июля 2019

Вы должны просто использовать метод moveToTop ()

 onDragStart={(el) => {el.target.moveToTop();}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...