Angular material 拖放 cdk:将项目合并为一个并交换元素

Angular material drag drop cdk: Combining items into one and swapping the elements

参考 Angular CDK 拖放,我正在尝试构建以下视频中显示的内容:

https://gyazo.com/218cd5efb6ebe5649ee431a7df47c1e9

我想同时实现两个功能:合并卡片和交换物品的位置。我在 Angular material.

中找不到此功能

所以我尝试了破解:

在上图中,假设 1、2、3、4、5、6 是我的数组值,0、1、2、3、4、5 是我的数组索引。

我尝试了一种逻辑来识别合并和交换案例:

注意:在真实元素前后添加-1 id记录

合并案例是: 来自 previousIndexValue > -1 && currentIndexValue > -1(当前的 before/after 除外 元素) 别的 交换大小写

密码是:

const previousIndex = event.previousIndex;
    const currentIndex = event.currentIndex;
    const prevSiblingIndex = previousIndex - 1;
    const nextSiblingIndex = previousIndex + 1

    if (currentIndex === prevSiblingIndex || currentIndex === nextSiblingIndex) {
      return true;
    }
    const previousCard = cards[previousIndex].id;
    const currentCard = cards[currentIndex].id;

    if (previousCard === currentCard) {
      return true;
    }

    if (previousCard > -1 && currentCard > -1) { console.log("Merge") }
    else { console.log("Swap"); }

如果 -1(假元素)具有相同的高度并且在容器中可见,如以下视频所示,上述逻辑对我来说工作正常:

https://youtu.be/1HUOSeyWVPs

但是如果我 hide/opacity = 0/设置可见性隐藏逻辑开始将交换识别为合并。

上面的逻辑似乎对我不起作用,每当我放下卡片进行交换时,上面的逻辑都会给出“合并”。

这是演示 link:Stackblitz demo

我写了一个自定义解决方案,因为它在任何地方都不可用

https://stackblitz.com/edit/angular-zhtdnq-lexssj