Tôi đang cố gắng để theo dõi một DragEnter/rời cho toàn bộ màn hình, được cho đến nay làm việc tốt trong Chrome/Safari, lịch sự của các plugin draghover từ https://stackoverflow.com/a/10310815/698289 như trong:Firefox bắn dragleave khi kéo qua văn bản
$.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');
}
});
});
Tuy nhiên Firefox vẫn đem lại cho tôi những vấn đề khi tôi kéo qua mục văn bản, đây là một fiddle để chứng minh: http://jsfiddle.net/tusRy/6/
đây có phải là một lỗi Firefox hoặc này có thể được thuần hóa với JS? Hoặc là có một phương pháp mạnh mẽ hơn để thực hiện tất cả điều này?
Cảm ơn!
CẬP NHẬT: Cập nhật fiddle thành http://jsfiddle.net/tusRy/6/ để giảm sự lộn xộn một chút. Để giải thích hành vi mong đợi của fiddle:
- Kéo tệp vào cửa sổ và mục tiêu p.target phải là "ENTER" màu vàng.
- Kéo tệp ra khỏi cửa sổ và p.target phải là "LEAVE" màu đỏ.
- Thả tệp trong cửa sổ và p.target phải là "LEAVE" màu đỏ.
Trong firefox, sự kiện LEAVE được kích hoạt khi bạn kéo tệp qua văn bản.
Tôi đã làm việc xung quanh điều này bây giờ bằng cách sử dụng một div lớp phủ, theo http://jsfiddle.net/tusRy/7/ tuy nhiên tôi không thực sự hạnh phúc về việc này là giải pháp vì vậy tôi sẽ để lại câu hỏi này mở cho đến khi có ý tưởng tốt hơn. – DanH