文件拖拽上传
1.可以直接将文件拖拽到 input 标签上,这样样式比较简单
2.使用拖拽API实现,可以自定义样式,以下为相关代码:

.upload {
width: 120px;
height: 120px;
border: 1px solid #ddd;
margin: 50px auto;
position: relative;
border-radius: 4px;
}
.upload::before,
.upload::after {
content: "";
background: #ccc;
position: absolute;
left: 50%;
top: 50%;
}
.upload::after {
height: 40px;
width: 2px;
transform: translate(-1px, -20px);
}
.upload::before {
height: 2px;
width: 40px;
transform: translate(-20px, -1px);
}
.upload:hover {
border: 1px dashed lightblue;
}
.file {
display: none;
}
.draging {
background: #dbf3fb;
border: 1px dashed lightblue;
}
<div class="upload" id="upload">
<input type="file" class="file" id="file" />
</div>
const upload = document.getElementById("upload");
upload.onclick = function () {
file.click();
};
upload.ondragenter = function (e) {
e.preventDefault();
e.target.classList.add("draging");
};
upload.ondragover = function (e) {
e.preventDefault();
};
upload.ondrop = function (e) {
e.preventDefault();
e.target.classList.remove("draging");
const types = e.dataTransfer.types;
if (!types || !types.includes("Files")) {
return;
}
const fileArr = e.dataTransfer.files;
if (fileArr && fileArr.length) {
const reader = new FileReader();
const curFile = fileArr.item(0);
if (curFile.type === "text/plain") {
reader.onload = function (event) {
console.log(event.target.result);
};
reader.readAsText(curFile);
} else if (curFile.type === "image/jpeg") {
reader.onload = function (event) {
document.querySelector("#imgView").src = event.target.result;
};
reader.readAsDataURL(curFile);
}
}
};
upload.ondragleave = function (e) {
e.preventDefault();
e.target.classList.remove("draging");
};