Saya memiliki HTML object
( embed
) yang mengisi lebar dan tinggi halaman. Jawaban oleh @ digital-plane berfungsi pada halaman web normal tetapi tidak jika pengguna menjatuhkan ke objek tertanam. Jadi saya butuh solusi berbeda.
Jika kita beralih ke menggunakan fase penangkapan acara, kita bisa mendapatkan peristiwa sebelum objek tertanam menerimanya (perhatikan true
nilai di akhir panggilan pendengar acara):
// 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);
Dengan menggunakan kode berikut (berdasarkan jawaban @ digital-plane), halaman menjadi target seret, mencegah embed objek menangkap peristiwa dan kemudian memuat gambar kami:
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);
Diuji pada Firefox pada Mac.