当前位置: 首页 > 知识库问答 >
问题:

取消拖动键按角度cdk拖放

荣轶
2023-03-14

我工作在一个应用程序实现新的拖放角材料CDK和我试图取消拖动事件的元素按下Esc,我的意思是,我开始拖动元素,但如果我按Esc当我拖动元素时,它应该回到我开始拖动它的位置,到目前为止,我还没有找到这样做的方法,有人知道我怎么做吗?在cdk留档里没有关于这个的任何想法。我试着做这样的事情。

样板

<div cdkDropList class="example-list" (cdkDropListDropped)="drop($event)">
  <div class="example-box" *ngFor="let movie of movies" (cdkDragEnded)="onDragEnded($event)" cdkDrag>{{movie}}</div>
</div>

Ts组件

onDragEnded(event: CdkDragEnd) {
  console.log(event)
  event.source.element.nativeElement.style.transform = 'none';
  const source: any = event.source;
  source._passiveTransform = { x: 0, y: 0 };
}

但到目前为止还没有成功。

共有3个答案

白哲茂
2023-03-14

最好的方法是调用事件。来源_德拉格雷夫。重置() ESC键时编码>(注释中提到@AleRubis)。现在的问题是,在cdkDrag事件(ESCkey event)之外,从何处可以获得dragRef,当拖动开始时,可以将其保存在这样的组件变量中。

组件:

cdkDragStarted=(事件)=

模板:

姚阳德
2023-03-14

可以使用以下命令将拖动的项目移动到某个位置:

event['source']['element']['nativeElement']['style']['transform'] = 'translate3d(0,0,0)';
event['source']['_dragRef']['_activeTransform'] = {x: 0, y: 0};
event['source']['_dragRef']['_passiveTransform'] = {x: 0, y: 0};
乌和畅
2023-03-14

我也面对这个问题很久了。最后,我可以通过发送一个mouseup事件来修复它,该事件将充当用户释放鼠标的角色。

@HostListener('window:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
    if (event.key === 'Escape') {
        document.dispatchEvent(new Event('mouseup'));
    }
}

这是一个非常笨拙的解决方案,并伴随着它的缺点。事实上,您不是取消拖动,而是删除。这意味着,如果您悬停在一个cdkDropList上,或者其中一个处于活动状态,它将触发该列表的cdkDropList下降发射器。您可以通过添加标志轻松解决这个问题。

private _canceledByEsq = false;

@HostListener('window:keyup', ['$event'])
handleKeyboardEvent(event: KeyboardEvent) {
    if (event.key === 'Escape') {
        this._canceledByEsq = true;
        document.dispatchEvent(new Event('mouseup'));
    }
}

handleDrop() {
    if (!this._canceledByEsq) {
        // Do my data manipulations
    }
}

希望这能帮助你……:)

 类似资料:
  • 我正在尝试在我的Angular 6应用程序中添加拖放功能,我正在尝试使用Angular material。这是我想要使用的概述链接。我遵循了入门说明,但我无法使用“@angular/cdk/drag-drop”,我尝试安装了bellow软件包 npm安装-保存@角/材料@角/cdk@角/动画 和 npm安装--保存@angular/cdk 从'@角/cdk/拖放'导入{DragDropMoules

  • 根据Angular CDK拖放文档,所有可拖放项都应使用迭代数组的指令编写。但是,如果我想使可拖放的项目是角度组件呢?什么是使它们可放下的程序? 例如,下面的代码是呈现一个普通的可删除div。如果我想在第二行渲染多个角度组件,该怎么办?在这种情况下,我不能使用指令,因为每个角组件都非常不同,我不能将它们保留在任何数组中。 怎么才能做到像下面这样呢?(以下代码不起作用) 我的主要目标是制作一个小部件

  • 如何在拖动时更改可拖动元素的文本,我有来自cdk/拖放库的代码片段。它为在拖动时捕捉事件提供参数。我可以通过本机元素进行更改,但它会更改所有样式,而且我还需要在dragover或其他操作上设置另一个事件。如果要在拖动元素上放置随机文本,有哪些选项? 在Html 在TS

  • 使用Material CDK库中的拖放行为,我试图在拖动元素时更改光标。 例如,在此StackBlitz中,光标悬停时为。我希望它在拖动时变为抓取。这方面的一个例子是在Google工作表中抓取一行时发生的情况: 读取样式化拖放组件的留档,看起来向这个类添加游标属性应该可以做到这一点: . cdk-drop-list-draging:当用户拖动项目时添加到cdkDropList的类。 代码如下所示:

  • 问题内容: 问题: 尝试在使用angular-drag-and-drop-lists的前端中模拟拖放 尝试过: 1.jquery-simulate:给出以下错误 未捕获到的TypeError:无法在’EventTarget’上执行’dispatchEvent’:参数1不是’Event’类型的。 2.drag-drop-helper.js:点击发生在要拖动的项目上 3.drag_to:什么也没发生

  • 我需要帮助进行角度拖放。就像我需要把一个图标拖到画布上。 我已经通过了许多例子,这是我所做的例子。当我拖动那个对象时,对象的副本应该被移动。我看了很多例子,请大家帮忙。