Firefoxは、ウィンドウの外側にドラッグすると、dragleaveイベントを適切にトリガーしません。
https://bugzilla.mozilla.org/show_bug.cgi?id=665704
https://bugzilla.mozilla.org/show_bug.cgi?id=656164
私はこれの回避策を開発しようとしています(Gmailがそれを行っているので可能だと私は知っています)が、私が思いつくことができる唯一のことは本当にハックなようです。
dragover
ウィンドウの外側にドラッグするタイミングを知る1つの方法は、イベントの発生が停止するのを待つことです(dragover
ドラッグアンドドロップ操作中に常に発生するため)。これが私がそれをしている方法です:
var timeout;
function dragleaveFunctionality() {
// do stuff
}
function firefoxTimeoutHack() {
clearTimeout(timeout);
timeout = setTimeout(dragleaveFunctionality, 200);
}
$(document).on('dragover', firefoxTimeoutHack);
このコードは基本的に、タイムアウトを何度も作成してクリアしています。dragover
イベントの発生が停止しない限り、200ミリ秒のタイムアウトには達しません。
これは機能しますが、この目的でタイムアウトを使用するというアイデアは好きではありません。気分が悪い。また、「ドロップゾーン」スタイルがなくなるまでにわずかな遅れがあることも意味します。
私が持っていたもう1つのアイデアは、マウスがウィンドウから離れるタイミングを検出することでしたが、ドラッグアンドドロップ操作では通常の方法では機能しないようです。
誰かがこれを行うためのより良い方法を持っていますか?
アップデート:
これが私が使用しているコードです:
$(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>