我找到了一些关于如何使用 .cdk-drag-preview
和 .cdk-drag-placeholder
类的基本示例,当没有嵌套元素时,它们似乎可以完成这项工作。
基本上,我有一个动作列表,每个动作都以复杂的 mat-card
格式表示。该部分实际上是作为另一个组件完成的,但为了这个示例,我将尽可能使其尽可能基本。
我的例子类似于这个结构:
<style>
.my_action { border: 2px solid red; }
</style>
<div class="drop_area" cdkDropList>
<div *ngFor="let action of actions"
(cdkDragStarted)="dragStart($event, action)"
(cdkDragMoved)="dragMoved($event, action)"
(cdkDragEnded)="dragEnded($event, action)" cdkDrag>
<mat-card class="my_action">
{{ action.name }}
</mat-card>
</div>
</div>
在角度分量
dragStart(e, action) {
// initialize start X coord
this.startX = 0;
// initialize start Y coord
this.startY = 0;
}
dragMoved(e, action) {
// record new position
this.endX = e.pointerPosition.x;
this.endY = e.pointerPosition.y;
// logic to set startX and startY
// TRYING TO CHANGE CARD BORDER COLOR IF this.endX - this.startX > some number
}
我希望能够做到以下几点:
- 将卡片向左拖动时将其边框颜色更改为蓝色,向右拖动时将其边框颜色更改为绿色
- 相应地更改拖动占位符的边框颜色。
The issue of using .cdk-drag-preview
and .cdk-drag-placeholder
seems to apply to the draggable div
(parent of mat-card
);然而,我正在尝试更改其孩子的边框颜色。
提前致谢 :)
附录
我最重要的挑战是更改拖动占位符中的边框颜色。我正在尝试更改占位符的边框颜色和左边距以指示用户操作已向左或向右移动,代表列表中的不同级别。
原文由 Brian 发布,翻译遵循 CC BY-SA 4.0 许可协议
像下面这样的东西会实现你的目标吗?
初始化
nativeElement
x 和 y比较 X 偏移并使用
rendere2
在nativeElement
--- 上设置样式修订:
要在拖动时更改颜色,请执行以下操作。
在视图中获取对
#cdkDropList
的引用。在
*ngFor
将索引传递给函数
接收索引并伸入
cdkDropList
的子项中以设置样式。堆栈闪电战
https://stackblitz.com/edit/angular-hdskvc?embed=1&file=app/cdk-drag-drop-overview-example.ts