HTML5原生Drag' n'丢弃 - 检测取消

时间:2015-11-10 13:08:57

标签: html5 drag-and-drop detection cancellation

我需要实施拖动' n'在浏览器窗口之间删除HTML元素。

当一个元素从窗口A删除到窗口B时,必须从窗口A中删除它(并添加到窗口B)。

当拖动' n' drop被取消(当用户按下" esc"键时,或者有时当拖动删除功能似乎出现错误时),该元素必须返回其原始位置。

目前我正在做的是保持" hasBeenDropped" flag,在dragstart中设置为false,在drop中设置为true。在dragend中,我检查我的标志,如果它没有设置为true,则表示该放置已在另一个窗口中触发,或者该操作已被取消。我需要区分这两种情况(放入另一个窗口vs取消),以便相应地采取行动(例如,移除窗口或将其替换为原始位置)。

TL; DR:我需要能够检测到原生HTML5何时拖动' n'删除操作已被取消(例如,当用户按下" esc"键)时。

有没有办法这样做?

2 个答案:

答案 0 :(得分:9)

和你一样,我用一面旗帜来判断掉落是否在其他地方成功发生,这或多或少意味着它没有被取消。然而,似乎有一种更合适的方式,如MDN所述:

  

完成拖动

     

拖动完成后,会在源文件中触发dragend事件   拖动(接收dragstart事件的元素)。这个   如果拖动成功[1]或取消,则会触发事件。   但是,您可以使用dropEffect属性来确定丢弃的内容   操作发生了。

     

如果在dragend期间dropEffect属性的值为none,则拖动被取消。否则,效果指定哪个   操作进行。源可以在a之后使用此信息   移动操作以从旧位置删除拖动的项目。该   如果用户取消,mozUserCancelled属性将设置为true   拖动(通过按Escape键),如果拖动被取消,则为false   其他原因,例如无效的放弃目标,或者是否成功。

mozilla特定属性显然是不合需要的,但dropEffect属性本身应该足以满足大多数用途。我自己进行了测试(将瓷砖拖入iframe内的dropzones),它似乎按预期工作。

这是直接从关于主题的当前MDN页面获取的:

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations#dragend

自从你换工作以后,对你来说可能不那么有用,但是很难找到关于这个主题的信息,所以希望下一个搜索的人会受益。

答案 1 :(得分:-1)

当拖动操作结束时(通过释放鼠标按钮或按下转义键)会触发dragend事件。 您可以查看事件属性" ctrlKey"。如果是,则按下Esc按钮。如有必要,您还可以查看其他房产。 请查看参考资料,例如:https://developer.mozilla.org/en-US/docs/Web/Events/dragend

Best,Alex