有区域限制的Angular 8拖放

我正在寻求一些帮助来解决我几天来一直在挠头的问题。

问题

我当前正在尝试实现拖放功能,该功能要求您最多可以拖动10个项目来填充指定的位置(仅允许放置1个项目),并且在填充10个位置之后,然后,在清除斑点之前,所有选项都将不再允许拖动。

我目前正在使用Ngx-Smooth-DND库进行拖放,但是我不限于此,并且可以满足要求(如果我拥有Kendo Sortable,可以使用其他库)的许可证。)

我正在苦苦挣扎的地方是拖放允许多个项目进入列表/区域,而我只想一次只允许一个区域中的一个项目。想象一下一个拖放测验,您可以将答案仅拖到图表上的一个点,一旦有了答案,您唯一可以做的就是要么删除另一项替换它,要么不允许其他任何东西掉落直到您清除空间。

要求

需要实现拖放要求,您可以从选项列表中拖动项目并将其拖放到10个不同区域之一中。

  • N个可能的拖动选项
  • 10个拖放区
  • 最多只能容纳1个物品

代码示例

我正在粘贴一个显示我要做什么的Stackblitz,并且我还将链接Ngx-smooth-dnd库github以获得文档:

https://stackblitz.com/edit/angular-ro3pyw

https://github.com/kutlugsahin/ngx-smooth-dnd

奖金

如果有更好的方法或更好的拖放库可以更简洁地完成此任务,那么我100%愿意接受选择。

huayuan1005 回答:有区域限制的Angular 8拖放

我使用了棱角材料:https://material.angular.io/cdk/drag-drop/overview 创建类似的东西。

我使用了以下示例:https://material.angular.io/cdk/drag-drop/overview#controlling-which-items-can-be-moved-into-a-container 弄清楚如何限制容器中可能存在的项目数量:

// drop-example.component.html
<div class="drop-area" cdkDropList
  #dropArea="cdkDropList"
  [cdkDropListData]="myEmptyArrayVariable"
  [cdkDropListConnectedTo]="[optionsList]"
  (cdkDropListDropped)="drop($event)"
  [cdkDropListEnterPredicate]="limiterPredicate">
// drop-example.component.ts
import { CdkDragDrop,moveItemInArray,transferArrayItem,CdkDrag,CdkDropList } from '@angular/cdk/drag-drop';

...
// see section in the drag-drop docs for example drop($event) {} function
...

limiterPredicate(item: CdkDrag,container: CdkDropList) {
  if (container.data.length === 0) {
    return true;
  } else {
    return false;
  }
}

如果您无法解决其余的问题,那么我可以尝试为您创建一个堆叠闪电战,让我知道!

本文链接:https://www.f2er.com/3141561.html

大家都在问