Tôi có một HTML object
(embed
) lấp đầy chiều rộng và chiều cao của trang. Câu trả lời của @ digital-plane hoạt động trên các trang web bình thường nhưng không phải nếu người dùng rơi vào một đối tượng nhúng. Vì vậy, tôi cần một giải pháp khác.
Nếu chúng ta chuyển sang sử dụng các event capture phase chúng tôi có thể nhận được các sự kiện trước khi đối tượng nhúng nhận họ (chú ý giá trị true
vào cuối của cuộc gọi lắng nghe sự kiện):
// document.body or window
document.body.addEventListener("dragover", function(e){
e = e || event;
e.preventDefault();
console.log("over true");
}, true);
document.body.addEventListener("drop", function(e){
e = e || event;
e.preventDefault();
console.log("drop true");
}, true);
Sử dụng đoạn mã sau (dựa trên câu trả lời của máy bay kỹ thuật số @) trang trở thành mục tiêu kéo, nó ngăn cản việc nhúng đối tượng từ việc chụp các sự kiện và sau đó tải hình ảnh của chúng tôi:
document.body.addEventListener("dragover", function(e){
e = e || event;
e.preventDefault();
console.log("over true");
}, true);
document.body.addEventListener("drop",function(e){
e = e || event;
e.preventDefault();
console.log("Drop true");
// begin loading image data to pass to our embed
var droppedFiles = e.dataTransfer.files;
var fileReaders = {};
var files = {};
var reader;
for (var i = 0; i < droppedFiles.length; i++) {
files[i] = droppedFiles[i]; // bc file is ref is overwritten
console.log("File: " + files[i].name + " " + files[i].size);
reader = new FileReader();
reader.file = files[i]; // bc loadend event has no file ref
reader.addEventListener("loadend", function (ev, loadedFile) {
var fileObject = {};
var currentReader = ev.target;
loadedFile = currentReader.file;
console.log("File loaded:" + loadedFile.name);
fileObject.dataURI = currentReader.result;
fileObject.name = loadedFile.name;
fileObject.type = loadedFile.type;
// call function on embed and pass file object
});
reader.readAsDataURL(files[i]);
}
}, true);
Đã thử nghiệm trên Firefox trên máy Mac.
Nguồn
2017-01-16 23:56:37
Chỉ tò mò bạn đang sử dụng mã nào để xử lý việc tải lên kéo/thả html5. Cảm ơn. – robertwbradford