Firefox 在窗口外拖动时没有正确触发 dragleave 事件:
https://bugzilla.mozilla.org/show_bug.cgi?id=665704
https://bugzilla.mozilla.org/show_bug.cgi?id=656164
我正在尝试为此开发一种解决方法(我知道这是可能的,因为 Gmail 正在这样做),但我唯一能想到的似乎真的很老套。
知道何时在窗口外拖动的一种方法是等待dragover
事件停止触发(因为dragover
在拖放操作期间会不断触发)。我是这样做的:
var timeout;
function dragleaveFunctionality() {
// do stuff
}
function firefoxTimeoutHack() {
clearTimeout(timeout);
timeout = setTimeout(dragleaveFunctionality, 200);
}
$(document).on('dragover', firefoxTimeoutHack);
这段代码本质上是一遍又一遍地创建和清除超时。dragover
除非事件停止触发,否则不会达到 200 毫秒超时。
虽然这可行,但我不喜欢为此目的使用超时的想法。感觉不对。这也意味着在“dropzone”样式消失之前会有一点延迟。
我的另一个想法是检测鼠标何时离开窗口,但是在拖放操作期间,这样做的正常方法似乎不起作用。
有没有人有更好的方法来做到这一点?
更新:
这是我正在使用的代码:
$(function() {
var counter = 0;
$(document).on('dragenter', function(e) {
counter += 1;
console.log(counter, e.target);
});
$(document).on('dragleave', function(e) {
counter -= 1;
console.log(counter, e.target);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>Open up the console and look at what number is reporting when dragging files in and out of the window. The number should always be 0 when leaving the window, but in Firefox it's not.</p>