angular - 角cdk拖放+调整大小
问题描述
我有一个像这样的代码:
<div
cdkDropList
id="{{executor.id}}-{{i}}"
[cdkDropListData]="date.tasks"
(cdkDropListDropped)="drop($event, date.date, executor)"
[cdkDropListConnectedTo]="allDropLists"
class="dropListDate">
<div
*ngFor="let item of date.tasks"
class="drag-me"
cdkDrag
(cdkDragEntered)="enterListContainer($event)"
[cdkDragData]="item"
resizable>
<app-plan-task [task]="item" [list]="true" cdkDragHandle></app-plan-task>
<div class="resize-drag-task" grabber></div>
</div>
</div>
可调整大小的指令
class Resizable {
_host: HTMLElement;
_startWidth = 0;
constructor(private elm: ElementRef) { }
ngOnInit() {
this._host = this.elm.nativeElement;
}
dragStart() {
console.log('START')
const style = window.getComputedStyle(this._host, undefined);
this._startWidth = style.width ? parseInt(style.width, 10) : 0;
}
dragging(diff: number) {
this._host.style.width = this._startWidth + diff + 'px';
}
dragEnd() {
console.log('END')
this._startWidth = 0;
}
}
抓取指令
class Grabber {
@HostListener('mousedown', ['$event'])
mousedown = (e: MouseEvent) => {
this._startOffsetX = e.clientX;
document.addEventListener('mousemove', this._boundDragging);
document.addEventListener('mouseup', this._boundDragEnd);
this.resizable.dragStart();
};
_startOffsetX = 0;
readonly _boundDragging = (e) => this._dragging(e);
readonly _boundDragEnd = (e) => this._dragEnd(e);
constructor(
private elm: ElementRef,
@Host() @SkipSelf() private resizable: ResizableDirective
) {
}
private _dragging(e: MouseEvent) {
const diff = e.clientX - this._startOffsetX;
this.resizable.dragging(diff);
}
private _dragEnd(e: MouseEvent) {
this._startOffsetX = 0;
document.removeEventListener('mousemove', this._boundDragging);
document.removeEventListener('mouseup', this._boundDragEnd);
this.resizable.dragEnd();
}
}
如您所见,我有多个带有垂直 dnd 的“表格”。现在我需要调整每个项目的大小,如果已经调整大小,则必须将其复制到一个新数组并获取它的索引。但实际上,当我单击“抓取器”时,我无法处理 DragEvent,因为它没有 cdkDragHandle。那么我如何以编程方式将此事件设置为我不想拖动它的抓取器,只需使用开始/移动/结束事件来获取调整大小元素的位置。
它可能看起来像: https ://cdn1.savepice.ru/uploads/2019/2/8/0426296ca859446d6a92f569bca34826-full.png
解决方案
推荐阅读
- python - 我们如何通过套接字编程(Python)与不同网络上的服务器和客户端建立服务器和客户端之间的连接?
- flutter - 参数类型 Data(其中 Data 在 Sorotan.dart 中定义)不能分配给参数类型 Data(其中 Data 在 DataModule.dart 中定义)
- docker - 简单的 nginx 反向代理在 docker compose 中不起作用
- amazon-s3 - 获取 S3 对象 Nifi
- python - 尝试更改键时“TypeError:列表索引必须是整数或切片,而不是 str”
- javascript - 如何将Child附加到类的不同实例?
- java - 如何使用 Java + Selenium WebDriver 保存和加载所有 cookie
- python - 从 Numpy 数组中选择每列满足某些条件的所有行
- javascript - 如何从 AWS Auth.currentSession() 返回的 Promise 中获取返回值
- r - 变量 R 的所有可能组合