22 <div
33 class =" file-importer"
44 :class =" { 'is-file-dragging': isFileDragging }"
5- @dragenter =" handleDragEnter"
6- @dragover =" handleDragOver"
7- @dragleave =" handleDragLeave"
8- @drop =" handleDrop"
5+ @dragenter.capture =" handleDragEnter"
6+ @dragover.capture =" handleDragOver"
7+ @dragleave.capture =" handleDragLeave"
8+ @drop.capture =" handleDrop"
99 >
1010 <slot />
1111
@@ -41,13 +41,16 @@ function resetFileDragging() {
4141function handleDragEnter(event : DragEvent ) {
4242 if (! hasFileTransfer (event )) return ;
4343 event .preventDefault ();
44+ // 避免 messageItem 的 drop.stop 阻止事件冒泡导致无法收到 drag 事件
45+ event .stopPropagation ();
4446 fileDragDepth .value += 1 ;
4547 isFileDragging .value = true ;
4648}
4749
4850function handleDragOver(event : DragEvent ) {
4951 if (! hasFileTransfer (event )) return ;
5052 event .preventDefault ();
53+ event .stopPropagation ();
5154 isFileDragging .value = true ;
5255 if (event .dataTransfer ) {
5356 event .dataTransfer .dropEffect = ' copy' ;
@@ -57,6 +60,7 @@ function handleDragOver(event: DragEvent) {
5760function handleDragLeave(event : DragEvent ) {
5861 if (! hasFileTransfer (event )) return ;
5962 event .preventDefault ();
63+ event .stopPropagation ();
6064 fileDragDepth .value = Math .max (0 , fileDragDepth .value - 1 );
6165 if (fileDragDepth .value === 0 ) {
6266 isFileDragging .value = false ;
@@ -66,6 +70,7 @@ function handleDragLeave(event: DragEvent) {
6670async function handleDrop(event : DragEvent ) {
6771 if (! hasFileTransfer (event )) return ;
6872 event .preventDefault ();
73+ event .stopPropagation ();
6974 const files = event .dataTransfer ?.files ;
7075 resetFileDragging ();
7176
0 commit comments