我需要实施拖动' n'在浏览器窗口之间删除HTML元素。
当一个元素从窗口A删除到窗口B时,必须从窗口A中删除它(并添加到窗口B)。
当拖动' n' drop被取消(当用户按下" esc"键时,或者有时当拖动删除功能似乎出现错误时),该元素必须返回其原始位置。
目前我正在做的是保持" hasBeenDropped" flag,在dragstart中设置为false,在drop中设置为true。在dragend中,我检查我的标志,如果它没有设置为true,则表示该放置已在另一个窗口中触发,或者该操作已被取消。我需要区分这两种情况(放入另一个窗口vs取消),以便相应地采取行动(例如,移除窗口或将其替换为原始位置)。
TL; DR:我需要能够检测到原生HTML5何时拖动' n'删除操作已被取消(例如,当用户按下" esc"键)时。
有没有办法这样做?
答案 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