获取 cdkDropList 中项目的放置位置

Posted

技术标签:

【中文标题】获取 cdkDropList 中项目的放置位置【英文标题】:Get drop position of item in cdkDropList 【发布时间】:2019-11-13 03:41:33 【问题描述】:

我正在尝试获取(或计算)在角度材料 cdkDropList 中放置的项目的 x/y 坐标。我研究了文档https://material.angular.io/cdk/drag-drop/api#CdkDragDrop,发现在CdkDragDrop界面中应该有一个名为“距离”的属性,但我在事件的控制台日志中找不到它:

drop(event: CdkDragDrop<string[]>) 
    console.log(event);

我只找到了容器、currentIndex、item、previousContainer、previousIndex。 顺便说一句:我是 Angular 新手,这和文档让我感到困惑:(

谢谢和问候

【问题讨论】:

【参考方案1】:

好吧,算了……属性距离是8.0.1版本引入的,我是7.1.0的……

更新

要获得此版本中的位置,您可以使用 cdkDragMoved 事件,如下所示:

https://grokonez.com/frontend/angular/angular-7/angular-7-drag-and-drop-example-angular-material-cdk

html部分:

<div cdkDrag class="drag-box"
  (cdkDragStarted)="dragStarted($event)"
  (cdkDragEnded)="dragEnded($event)"
  (cdkDragMoved)="dragMoved($event)"
>
  drag me
</div>
<p>state position</p>

在 TypeScript 中:

import  CdkDragEnd, CdkDragStart, CdkDragMove  from '@angular/cdk/drag-drop';
...
export class DragComponent implements OnInit 
  state = '';
  position = '';
  ...

  dragStarted(event: CdkDragStart) 
    this.state = 'dragStarted';
  

  dragEnded(event: CdkDragEnd) 
    this.state = 'dragEnded';
  

  dragMoved(event: CdkDragMove) 
    this.position = `> Position X: $event.pointerPosition.x - Y: $event.pointerPosition.y`;
  

【讨论】:

以上是关于获取 cdkDropList 中项目的放置位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在组件之间使用 Angular 7 cdkDropList?

使用 cdkDropList 时元素样式不适用(角度 cdk 拖放)

使用 visjs 时间线,如何获取时间线中放置的范围项目的开始时间(我放置它的位置)

Angular 8 和 Angular 材质:使用 CdkDropList 项拖动滚动

CdkDropList 输入已弃用 CdkDropList 中不存在

中项笔记