【发布时间】:2012-12-21 02:04:20
【问题描述】:
我正在尝试跟踪整个屏幕的 dragenter/leave,这在 Chrome/Safari 中运行良好,这要归功于 https://stackoverflow.com/a/10310815/698289 的 draghover 插件,如下所示:
$.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 事件。
【问题讨论】:
-
根据jsfiddle.net/tusRy/7,我现在已经通过使用覆盖 div 来解决这个问题,但是我对这是解决方案并不满意,所以我会留下这个问题,直到有更好的想法来了。
标签: javascript firefox drag-and-drop