|
11 | 11 |
|
12 | 12 | <div id="input-container"> |
13 | 13 | <div id="secret-container"> |
| 14 | + <div id="drop-zone" style="display: none;"> |
| 15 | + <p>Drag and drop an image file here.</p> |
| 16 | + <p>Supported formats: PNG, JPEG, BMP, ...</p> |
| 17 | + </div> |
| 18 | + |
14 | 19 | <label>Select an image file.</label> |
15 | 20 | <input type="file" id="fileInput" accept="image/*" required> |
16 | 21 | <br> |
|
180 | 185 | } |
181 | 186 | }); |
182 | 187 |
|
| 188 | + // handle drag and drop |
| 189 | + { |
| 190 | + const dropZone = document.getElementById('drop-zone'); |
| 191 | + let inDrag = false; |
| 192 | + let taskId = null; |
| 193 | + function hideDropZone() { |
| 194 | + if (inDrag) return; |
| 195 | + dropZone.style.display = 'none'; |
| 196 | + } |
| 197 | + window.addEventListener('dragover', (event) => { |
| 198 | + event.preventDefault(); |
| 199 | + dropZone.style.display = 'block'; |
| 200 | + inDrag = true; |
| 201 | + if (taskId) { window.clearTimeout(taskId); } |
| 202 | + taskId = window.setTimeout(hideDropZone, 100); |
| 203 | + }); |
| 204 | + window.addEventListener('dragmove', (event) => { |
| 205 | + event.preventDefault(); |
| 206 | + dropZone.style.display = 'block'; |
| 207 | + inDrag = true; |
| 208 | + if (taskId) { window.clearTimeout(taskId); } |
| 209 | + taskId = window.setTimeout(hideDropZone, 100); |
| 210 | + }); |
| 211 | + window.addEventListener('dragleave', (event) => { |
| 212 | + event.preventDefault(); |
| 213 | + inDrag = false; |
| 214 | + if (taskId) { window.clearTimeout(taskId); } |
| 215 | + taskId = window.setTimeout(hideDropZone, 100); |
| 216 | + }); |
| 217 | + dropZone.addEventListener('drop', (event) => { |
| 218 | + event.preventDefault(); |
| 219 | + if (event.dataTransfer.files.length > 0) { |
| 220 | + fileInput.files = event.dataTransfer.files; |
| 221 | + fileInput.dispatchEvent(new Event('change')); |
| 222 | + } |
| 223 | + inDrag = false; |
| 224 | + dropZone.style.display = 'none'; |
| 225 | + }); |
| 226 | + } |
| 227 | + |
183 | 228 | </script> |
184 | 229 | </html> |
0 commit comments