拖拽上传时怎么高亮显示拖入区域?
我在做拖拽上传功能,但用户把文件拖到上传区域时没有视觉反馈,体验很差。我试过监听 dragover 和 drop 事件,也加了 preventDefault,但 CSS 的 :hover 伪类在拖拽时根本不生效。
下面是我给拖拽区域写的样式,想在拖入时加个蓝色边框和背景色,可就是没反应:
.upload-area {
border: 2px dashed #ccc;
padding: 40px;
text-align: center;
}
.upload-area.drag-over {
border-color: #007bff;
background-color: #f8f9ff;
}
JS 里我也加了 class,但样式就是不更新,是不是哪里漏了?
给你一个完整可用的写法:
CSS 保持你原来的就行:
两个关键点:
第一,dragover 事件里没有 preventDefault 的话,浏览器会阻止 drop 操作,而且也不会触发 CSS 的状态变化,这是很多人容易漏掉的。
第二,dragleave 有个坑——当拖入区域内部有子元素时,鼠标从父元素移到子元素会触发 dragleave,再移回父元素又触发 dragenter,导致样式闪烁。解决办法就是上面代码里的 contains 判断,或者你直接把拖入区域设为没有子元素的纯容器。