ฉันมี HTML object
( embed
) ที่เติมความกว้างและความสูงของหน้า คำตอบโดย @ digital-plane ทำงานบนเว็บเพจปกติ แต่ไม่ใช่ถ้าผู้ใช้วางลงบนวัตถุฝังตัว ดังนั้นฉันต้องการโซลูชันที่แตกต่าง
หากเราเปลี่ยนไปใช้การใช้ช่วงการดักจับเหตุการณ์เราสามารถรับเหตุการณ์ก่อนที่วัตถุฝังตัวจะได้รับ (สังเกตเห็นtrue
ค่าเมื่อสิ้นสุดการเรียกฟังเหตุการณ์):
// 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);
การใช้รหัสต่อไปนี้ (ขึ้นอยู่กับคำตอบของ @ digital-plane) หน้าจะกลายเป็นเป้าหมายการลากมันจะป้องกันไม่ให้วัตถุฝังจากการดักจับเหตุการณ์แล้วโหลดภาพของเรา:
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);
ทดสอบบน Firefox บน Mac