直接看效果
实现代码
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>拖拽上传文件title>
- <style>
- /* 拖拽容器 */
- .box-container {
- position: relative;
- display: flex;
- justify-content: center;
- align-items: center;
- border: 1px dashed black;
- border-radius: 7px;
- width: 200px;
- height: 100px;
- }
-
- .box1 {
- position: absolute;
- width: 10px;
- height: 50px;
- background: black;
- }
-
- .box2 {
- position: absolute;
- width: 50px;
- height: 10px;
- background: black;
- }
-
- .dropbox {
- position: absolute;
- opacity: 0;
- width: 100%;
- height: 100%;
- line-height: 100px;
- text-align: center;
- font-size: 20px;
- font-weight: 900;
- background: rgb(0, 0, 0, 0.3);
-
- }
-
- /* 图片容器 */
- .img-container {
- width: 500px;
- height: 500px;
- border: 1px solid black;
- border-radius: 10px;
- box-shadow: 2px 2px 20px 3px black;
- overflow: auto;
- }
-
- .img-item {
- float: left;
- width: 50px;
- height: 50px;
- margin: 5px;
- border: 1px solid black;
- border-radius: 10px;
- }
- style>
- head>
-
- <body>
- <div class="box-container">
- <div class="box1">div>
- <div class="box2">div>
- <div class="dropbox">拖拽上传文件div>
- div>
- <br>
- <hr>
- <br>
- <div class="img-container">div>
-
- body>
- <script>
-
-
- let dropbox = document.querySelector('.dropbox')
- dropbox.addEventListener("dragenter", dragenter, false)
- dropbox.addEventListener("dragover", dragover, false)
- dropbox.addEventListener("drop", drop, false)
- dropbox.addEventListener('dragleave', dragleave, false)
-
- function dragenter(e) {
- e.stopPropagation();
- e.preventDefault();
- }
-
- // 进入拖拽容器
- function dragover(e) {
- e.stopPropagation();
- e.preventDefault();
- dropbox.style.cssText = `
- opacity: 1;`
- }
-
- // 离开拖拽容器
- function dragleave(e) {
- e.stopPropagation();
- e.preventDefault();
- dropbox.style.cssText = `
- opacity: 0;`
- }
-
- // 将拖拽标签放在拖拽容器上(鼠标松开)
- function drop(e) {
- e.stopPropagation();
- e.preventDefault();
-
- dropbox.style.cssText = `
- opacity: 0;`
-
- const dt = e.dataTransfer;
- const files = dt.files;
- console.log(dt.files);
-
- handleFiles(files);
- }
-
- let imgContainer = document.querySelector('.img-container')
- /**
- * handleFiles() 处理文件列表
- *
- * @param files 文件列表
- * @return
- */
- function handleFiles(files) {
- for (const file of files) {
- if (!file.type.startsWith("image")) {
- continue
- }
-
- const img = document.createElement('img')
- img.classList.add('img-item')
-
- // 读取文件流
- const reader = new FileReader()
- reader.onload = (e) => {
- img.src = e.target.result
- imgContainer.appendChild(img)
- }
- reader.readAsDataURL(file)
- }
- }
-
- script>
-
- html>