Skip to content

Commit 8e6c8cb

Browse files
committed
drop file select
1 parent 124ed0c commit 8e6c8cb

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

app/index.html

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111

1212
<div id="input-container">
1313
<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+
1419
<label>Select an image file.</label>
1520
<input type="file" id="fileInput" accept="image/*" required>
1621
<br>
@@ -180,5 +185,45 @@
180185
}
181186
});
182187

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+
183228
</script>
184229
</html>

app/style.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ body {
88
margin-left: auto;
99
}
1010

11+
div#drop-zone {
12+
border: 2px dashed #ccc;
13+
border-radius: 0.5rem;
14+
padding-inline: 0.5rem;
15+
padding-block: 2rem;
16+
text-align: center;
17+
background-color: #f9f9f9;
18+
transition: background-color 0.3s ease-in-out;
19+
margin-bottom: 0.5rem;
20+
}
21+
1122
div#secret-container {
1223
display: flex;
1324
flex-direction: column;

0 commit comments

Comments
 (0)