如何防止dragleave干扰嵌套dropzone元素上的dragenter事件?

时间:2018-12-28 13:58:51

标签: javascript html5 drag-and-drop

dropzone中有两个嵌套元素,并从外部元素拖动到内部元素,dragleave操作优先于dragenter

我最初有一个dropzone格,它在dragenter上更改了类('canDrop')来指示是否可以放下,而在dragleave上该类恢复为中性('plainDropZone')。

放下后,draggable div成为dropzone div的子级。现在,当另一个draggable输入dropzone时,类将更改为'noDrop',以指示无法再进行丢弃。在dragleave上,类又恢复为中立状态(“ p​​lainDropZone”)

问题:从外部dropzone div拖动到内部放置的div时,外部dropzone div不应恢复为中性,但仍具有“ noDrop”类。

据我所知,这无法按预期工作,因为从外部div到内部div时,dragleavedragenter之后被解雇。该线程很好地形象地显示了问题:HTML 5 drag events: 'dragleave' fired after 'dragenter'

这是完整的演示:https://jsfiddle.net/e12uadgh/

因此,当外部dropzone div具有内部div且用户将第三个div从外部dropzone div拖放到内部div时,如何将外部{{1}} div分配为类'noDrop' div?

1 个答案:

答案 0 :(得分:1)

找到一种实现效果的方法。当将元素从外部dropzone div拖动到内部dropzone div时,外部div的dragleave在内部div的dragenter之后被触发,因此dragenter上的任何更改都将被对dragleave

因此,一种解决方案是,如果下一个事件目标不是内部div,则仅对dragleave进行更改。由于无法通过检查event.target上的dragleave来完成,因此我们可以改用一个切换,该切换在内部div上的dragenter上设置为true,而在{{1 }}在内部div上。

这是一个演示:https://jsfiddle.net/rookie_sen/2Lp5qg39/5/