HTML5拖放-当Angular移动或删除源元素时不会触发“dragend”

Posted

技术标签:

【中文标题】HTML5拖放-当Angular移动或删除源元素时不会触发“dragend”【英文标题】:HTML5 drag and drop - "dragend" not fired when source element is moved or removed by Angular 【发布时间】:2017-08-16 11:12:51 【问题描述】:

我使用的是 Google 的 Angular Drag and Drop Lists,但我认为问题在于底层 html5 拖放功能不适用于 Angular (v1.6.1)。

根据MDN(底部“完成拖动”下方的注释):

如果源节点在拖动过程中被移动或移除(例如在“drop”或“dragover”上),则不会调度“dragend”。 bug 460801

我正在“dragover”事件中更改 Angular 模型以在拖动操作期间显示反馈。我认为 Angular 正在移动或移除(并重新创建)我的源元素,这就是阻止“dragend”触发的原因。

这意味着当拖动操作不成功时我无法知道何时完成(成功时在目标元素上触发“drop”事件)

有什么想法吗?

【问题讨论】:

展示问题的示例将非常有帮助。 (为什么你认为 angular 会删除节点?我知道 angular 是坏人,但通常它会按照你的代码执行) 【参考方案1】:

为后代回答我自己的问题!

我解决了这个问题,确保 Angular 摘要循环在拖放操作期间没有运行。

这似乎支持了我关于源元素被 Angular 删除和重新创建以防止触发 dragend 事件的理论。

我不得不回退到 JQuery 以在拖放过程中提供视觉反馈。

HTH

【讨论】:

以上是关于HTML5拖放-当Angular移动或删除源元素时不会触发“dragend”的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTML5 原生拖放时如何约束移动?

用于 Angular 行重新排序的 Kendo Grid - Angular 4/5 - HTML5 拖放 API

js拖放事件详解及实战

Angular CDK拖放,保持顺序直到下降

Html5之高级-11 拖放API (拖放事件dataTransfer对象setDragImage方法)

使用 HTML5 拖放,有没有办法在保持拖动流的同时隐藏元素