Skip to content

Commit 9bbe869

Browse files
committed
Update drag listeners
1 parent d48b537 commit 9bbe869

File tree

4 files changed

+17
-9
lines changed

4 files changed

+17
-9
lines changed

demo/App.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<!-- just for tests -->
33
<video src="#" style="background-color: aqua"> TEST </video>
44

5-
<FileInput :state="state">
5+
<FileInput :state="state" :global-drop-zone="true">
66
<!-- <FileInputSelectedInfo :state="state"/>-->
77
</FileInput>
88

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@alttiri/vue-file-input",
3-
"version": "1.4.2-20240819",
3+
"version": "1.5.0-20240819",
44
"type": "module",
55
"description": "Vue.js file input with Drag and Drop support.",
66
"homepage": "https://github.com/alttiri/vue-file-input",

src/components/FileInput.vue

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,23 @@ function initListeners() {
7979
return;
8080
}
8181
dropZone.value.addEventListener("dragenter", onDragEnter);
82+
dropZone.value.addEventListener("dragenter", onDragOver);
83+
dropZone.value.addEventListener("dragover", onDragOver);
8284
dropZone.value.addEventListener("dragleave", onDragLeave);
8385
dropZone.value.addEventListener("drop", onDrop);
84-
dropZone.value.addEventListener("dragover", onDragOver);
86+
document.body.addEventListener("dragenter", onDragOverNonDropZone);
8587
document.body.addEventListener("dragover", onDragOverNonDropZone);
8688
}
8789
function removeListeners() {
8890
if (!dropZone.value) {
8991
return;
9092
}
9193
dropZone.value.removeEventListener("dragenter", onDragEnter);
94+
dropZone.value.removeEventListener("dragenter", onDragOver);
95+
dropZone.value.removeEventListener("dragover", onDragOver);
9296
dropZone.value.removeEventListener("dragleave", onDragLeave);
9397
dropZone.value.removeEventListener("drop", onDrop);
94-
dropZone.value.removeEventListener("dragover", onDragOver);
98+
document.body.removeEventListener("dragenter", onDragOverNonDropZone);
9599
document.body.removeEventListener("dragover", onDragOverNonDropZone);
96100
}
97101
@@ -113,6 +117,9 @@ function onDragOver(event: DragEvent) {
113117
}
114118
function onDragEnter(event: DragEvent) {
115119
stopEvent(event);
120+
if (event.relatedTarget !== null) {
121+
return;
122+
}
116123
if (!dropHover.value) {
117124
dropHover.value = true;
118125
} else {
@@ -122,10 +129,11 @@ function onDragEnter(event: DragEvent) {
122129
}
123130
function onDragLeave(event: DragEvent) {
124131
stopEvent(event);
125-
if (!dropZone.value?.contains(event.relatedTarget as Node)) {
126-
dropHover.value = false;
127-
resetDataTransferHover();
132+
if (event.relatedTarget !== null) {
133+
return;
128134
}
135+
dropHover.value = false;
136+
resetDataTransferHover();
129137
}
130138
131139
function onDragOverNonDropZone(event: DragEvent) {

0 commit comments

Comments
 (0)