let dropArea; document.addEventListener('DOMContentLoaded', () => { dropArea = document.getElementById('drop-area'); ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => dropArea.addEventListener(eventName, preventDefaults, false)); ['dragenter', 'dragover'].forEach(eventName => dropArea.addEventListener(eventName, highlight, false)); ['dragleave', 'drop'].forEach(eventName => dropArea.addEventListener(eventName, unhighlight, false)); dropArea.addEventListener('drop', handleDrop, false); }, false); function preventDefaults(e) { e.preventDefault(); e.stopPropagation(); } function highlight(e) { dropArea.classList.add('highlight'); } function unhighlight(e) { dropArea.classList.remove('highlight') } function handleDrop(e) { const dt = e.dataTransfer; const files = dt.files; handleFiles(files); } function handleFiles(files) { // console.log(files); // alert(Array.isArray(files)); // false // alert(Array.isArray(Object.values(files))); // true // alert(Array.isArray([...files])); // true // this won't work: // files.forEach(uploadFile); [...files].forEach(uploadFile); } function uploadFile(file) { alert('uploading ' + file.name); }
<head> <script src='index.js'></script> <style> html { box-sizing: border-box; } *, *:before, *:after { box-sizing: inherit; } * { margin: 0; padding: 0; } #drop-area { border: 2px dashed #ccc; border-radius: 20px; width: 480px; font-family: sans-serif; margin: 100px auto; padding: 20px; } #drop-area.highlight { border-color: purple; } p { margin-top: 0; } .my-form { margin-bottom: 10px; } #gallery { margin-top: 10px; } #gallery img { width: 150px; margin-bottom: 10px; margin-right: 10px; vertical-align: middle; } .button { display: inline-block; padding: 10px; background: #ccc; cursor: pointer; border-radius: 5px; border: 1px solid #ccc; } #fileElem { display: none; } </style> </head> <body> <div id="drop-area"> <div id="my-form"> <p>Upload multiple files with the file dialog or by dragging and dropping images onto the dashed region</p> <input type="file" id="fileElem" multiple="multiple" accept="image/*" onchange="handleFiles(this.files)"> <label for="fileElem" class="button">Select some files</label> </div> </div> </body>
No comments:
Post a Comment