Angular CDK拖放 - 如何保持原始位置?

Posted

技术标签:

【中文标题】Angular CDK拖放 - 如何保持原始位置?【英文标题】:Angular CDK drag and drop - how to keep original position? 【发布时间】:2019-06-19 02:38:18 【问题描述】:

我正在尝试拖放 Angular/cdk 库。见链接:https://material.angular.io/cdk/drag-drop/overview

我一直在用它进行原型设计,但有一件事我似乎无法找到解决方案。

例如,如果您查看链接中的待办事项列表,您会发现当开始拖动时,您会丢失放置项目的原始位置。

所以我的问题是:有人知道在开始使用 Angular/cdk 拖动项目时如何保持原始位置突出显示吗?

【问题讨论】:

【参考方案1】:

我也偶然发现了同样的问题。目前没有直接的解决方案。您必须有自己的解决方法。最初,您必须了解 cdk-drag-drop 默认情况下会提供以下事件来帮助您解决问题。 cdk-drag-drop api

    cdkDragStarted - 当您开始拖动元素时调用此事件。 cdkDragReleased - 当您释放拖动的元素时调用此事件。

html 如下所示

   <div cdkDropList
          (cdkDropEntered)="entered($event)"
          [cdkDropListData]="items"
          (cdkDropListDropped)="dropped($event)">
        <div class="drop-list">
         <div class="drag-location" *ngIf="draggedItemIndex == cind"></div>
         <div class="drag-element"
             *ngFor="let childItem of items; let cind=index"
             (cdkDragStarted)="cdkDragStarted($event,childItem, cind)" 
             (cdkDragReleased)="cdkDragReleased($event, cind)"
             cdkDrag>
         </div>
        </div>
       </div>
     </div>
    </div>
   ...
  </div>
 </div>

在组件中你可以尝试如下,

function cdkDragStarted(event, childItem,cind)
   this.draggedItemIndex = cind;

function cdkDragReleased(event, childItem,cind)
   this.draggedItemIndex = undefined;

在 css 中,您可以将 css 添加到特定的“拖动位置”类。

.drag-location
  height: 5px;
  background-color: #4d4dff

因此,根据程序的逻辑,每当您拖动一个元素时,它的“拖动位置”div 就会启用,并且会显示一条蓝线。这样,它可以用作拖动位置的指示。这是一个简单的解决方法。我在一个更大的应用程序中使用了类似的过程,但差别不大。

警告:不要将“drag-location”div设置得太高,因为它会干扰cdk-drag-drop css并折叠基本结构。

【讨论】:

以上是关于Angular CDK拖放 - 如何保持原始位置?的主要内容,如果未能解决你的问题,请参考以下文章

Angular Material、cdk、拖放、拖放和插入到 TextArea 字段的当前位置

Angular CDK 拖放:不要移动源项目

如何更改 Angular CDK 拖放的 z-index?

在 Angular Material CDK 拖放中,如何防止项目随着元素移动而自动重新排列?

Angular 嵌套拖放 / CDK 材质 cdkDropListGroup cdkDropList nested

CSS flexbox中的Angular CDK拖放问题