Я пытаюсь отслеживать dragenter/leave для всего экрана, который до сих пор отлично работает в Chrome/Safari, благодаря плану draguover из qaru.site/info/33623/... как в:
$.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? Или существует более надежный способ выполнения всего этого?
Спасибо!
UPDATE: обновить скрипт до http://jsfiddle.net/tusRy/6/, чтобы немного уменьшить беспорядок. Чтобы объяснить ожидаемое поведение скрипта:
- Перетащите файл в окно, а p.target должен быть "ENTER" цветным.
- Извлеките файл из окна, а p.target должен "ОСТАВИТЬ" цветной красный.
- Отбросьте файл в окне, а p.target должен "ОСТАВИТЬ" цветной красный.
В firefox событие LEAVE запускается при перетаскивании файла по тексту.