HTML Drag and Drop API定义了两个非常相似的事件dragleave
和dragexit
,它们与dragenter
一起用于帮助跟踪当前的投放目标。
快速搜索没有显示这两个事件的任何当前和清晰的文档,当一个应该用于另一个时,以及浏览器支持,所以我想我会在这里问。
我将分享到目前为止我找到的资源:
dragexit
,而IE至少实现了dragleave
,主要区别在于事件的顺序:dragexit
在对应dragenter
之前触发,而dragleave
,令人困惑,在之后开火。dragleave
,但后来(~2013)使用Mozilla的语义添加了dragexit
。dragleave
,最初是dragexit
的同义词,但后来(4.0,~2011?)将其更改为符合规范。dragexit
答案 0 :(得分:26)
我已从MDN获取代码示例并在Chrome 57.0.2987.110和Firefox 52.0.2上运行。
Firefox事件序列是
- dragexit
- dragleave
- 降
醇>
但Chrome从未触发dragexit
事件。
Chrome事件序列
- dragleave
- 降
醇>
对dragexit
事件的进一步分析,我在维基百科中发现它是Mozilla XUL events的一部分,其中说:
除了常见/ W3C事件之外,Mozilla还定义了一组仅适用于XUL元素的事件
如果您需要代码段,此处dragexit
dragleave
和document.addEventListener("dragexit", function(event) {
console.log(event.type);
// reset the transparency
event.target.style.opacity = "";
}, false);
document.addEventListener("dragleave", function(event) {
console.log(event.type);
// reset background of potential drop target when the draggable element leaves it
if (event.target.className == "dropzone") {
event.target.style.background = "";
}
}, false);
来自plunkr的事件摘要。
dragexit
有一个有趣的tutorial表明DnD API可以在不使用所有浏览器都不完全支持的dragleave
事件的情况下完全实现。您可以安全地使用proxy_pass
事件代替所有主流浏览器都支持的事件。