https://stackoverflow.com/a/10310815/698289の draghover プラグインのおかげで、Chrome/Safari でこれまでのところ正常に動作している画面全体の dragenter/leave を追跡しようとしています。
$.fn.draghover = function(options) {
return this.each(function() {
var collection = $(),
self = $(this);
self.on('dragenter', function(e) {
if (collection.size() === 0) {
self.trigger('draghoverstart');
}
collection = collection.add(e.target);
});
self.on('dragleave drop', function(e) {
// timeout is needed because Firefox 3.6 fires the dragleave event on
// the previous element before firing dragenter on the next one
setTimeout( function() {
collection = collection.not(e.target);
if (collection.size() === 0) {
self.trigger('draghoverend');
}
}, 1);
});
});
};
function setText(text) {
$('p.target').text(text);
}
$(document).ready(function() {
$(window).draghover().on({
'draghoverstart': function() {
setText('enter');
},
'draghoverend': function() {
setText('leave');
}
});
});
ただし、テキスト項目をドラッグすると、Firefox でまだ問題が発生します。デモ用のフィドルを次に示します: http://jsfiddle.net/tusRy/6/
これは Firefox のバグですか、それとも JS で対処できますか? または、これらすべてを実行するためのより堅牢な方法はありますか?
ありがとう!
更新:混乱を少し減らすために、フィドルをhttp://jsfiddle.net/tusRy/6/に更新しました。フィドルの予想される動作を説明するには:
- ファイルをウィンドウにドラッグすると、p.target が黄色の「ENTER」になるはずです。
- ファイルをウィンドウの外にドラッグすると、p.target が赤色の「LEAVE」になるはずです。
- ウィンドウにファイルをドロップすると、p.target は赤色の「LEAVE」になります。
Firefox では、ファイルをテキスト上にドラッグすると、LEAVE イベントがトリガーされます。