diff --git a/apps/web/src/pages/assets/components/AssetUploadZone.tsx b/apps/web/src/pages/assets/components/AssetUploadZone.tsx index 0b78e5f01..bb9abdac8 100644 --- a/apps/web/src/pages/assets/components/AssetUploadZone.tsx +++ b/apps/web/src/pages/assets/components/AssetUploadZone.tsx @@ -20,6 +20,9 @@ export const AssetUploadZone: React.FC = ({ onUpload, }) => { const inputRef = useRef(null) + // dragenter/dragleave 在经过子元素时会成对触发,用计数器避免高亮闪烁; + // 计数器归零(拖拽真正离开容器)才取消高亮 + const dragDepthRef = useRef(0) const [dragOver, setDragOver] = useState(false) const pickFiles = (list: FileList | null) => { @@ -30,16 +33,24 @@ export const AssetUploadZone: React.FC = ({ return (
{ + e.preventDefault() + dragDepthRef.current += 1 + setDragOver(true) + }} onDragOver={(e) => { e.preventDefault() - setDragOver(true) }} onDragLeave={(e) => { e.preventDefault() - setDragOver(false) + dragDepthRef.current = Math.max(0, dragDepthRef.current - 1) + if (dragDepthRef.current === 0) { + setDragOver(false) + } }} onDrop={(e) => { e.preventDefault() + dragDepthRef.current = 0 setDragOver(false) pickFiles(e.dataTransfer.files) }}