作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找到了一些关于如何使用 .cdk-drag-preview
的基本示例和 .cdk-drag-placeholder
类,当没有嵌套元素时,它们似乎可以完成这项工作。
基本上,我有一个 Action 列表,每个 Action 都用一个复杂的 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
}
.cdk-drag-preview
和
.cdk-drag-placeholder
似乎适用于可拖动的
div
(
mat-card
的父级);而我正在尝试更改其 child 的边框颜色。
最佳答案
像下面这样的东西会实现你的目标吗?
初始化 nativeElement
x 和 y
dragStart(e, action) {
const rect = e.source.element.nativeElement.getBoundingClientRect();
// initialize start X coord
this.startX = rect.x;
// initialize start Y coord
this.startY = rect.y;
}
rendere2
在
nativeElement
上设置样式
dragMoved(e, action) {
// record new position
this.currentX = e.event.clientX;
this.currentY = e.event.clientY;
// logic to set startX and startY
// TRYING TO CHANGE CARD BORDER COLOR IF this.endX - this.startX > some number
if(this.startX < this.currentX){
this._renderer.setStyle(e.source.element.nativeElement, 'border-style', 'solid');
this._renderer.setStyle(e.source.element.nativeElement, 'border-color', 'green');
}
else if (this.startX > this.currentX){
this._renderer.setStyle(e.source.element.nativeElement, 'border-style', 'solid');
this._renderer.setStyle(e.source.element.nativeElement, 'border-color', 'blue');
}
}
#cdkDropList
在 View 中。
@ViewChild('cdkDropList') _dropList:any;
*ngFor
中设置索引
*ngFor="let action of actions; let i = index"
(cdkDragMoved)="dragMoved($event, action, i)"
cdkDropList
的子代设置样式。
dragMoved(e, action, i) {
// record new position
this.currentX = e.event.clientX;
this.currentY = e.event.clientY;
// logic to set startX and startY
// TRYING TO CHANGE CARD BORDER COLOR IF this.endX - this.startX > some number
if(this.startX < this.currentX){
this._renderer.setStyle(this._dropList.nativeElement.children[i], 'border-style', 'solid');
this._renderer.setStyle(this._dropList.nativeElement.children[i], 'border-color', 'green');
}
else if (this.startX > this.currentX){
this._renderer.setStyle(this._dropList.nativeElement.children[i], 'border-style', 'solid');
this._renderer.setStyle(this._dropList.nativeElement.children[i], 'border-color', 'blue');
}
}
关于angular - 如何在Angular Material 7中自定义CSS拖拽,拖拽预览,拖拽占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55750941/
我是一名优秀的程序员,十分优秀!