【发布时间】:2012-12-22 21:11:26
【问题描述】:
我正在尝试实现一个拖放上传器,当一个文件被拖到窗口中时,它会用一个覆盖(dropzone 内的 100% 宽度/高度绝对元素,静态时看起来很棒)标记 dropzone,并删除它标记文件何时离开窗口或被拖放到放置区之外。
问题是当文件被拖入窗口时,dragover 和 dragleave 事件会像疯了一样触发,因此覆盖层会像疯了一样闪进闪出。
window.addEventListener('dragover', handleDrag, false);
window.addEventListener('dragleave', handleStop, false);
window.addEventListener('drop', handleStop, false);
dropzone.addEventListener('drop', handleUpload, false);
function handleDrag(event) {
// Stop normal browser response.
event.stopPropagation();
event.preventDefault();
if (!window.mysettings.dragging) {
window.mysettings.dragging = true;
$('#dropzone').prepend('<div class="overlay">HELLO</div>');
}
}
function handleStop(event) {
// Stop normal browser response.
event.stopPropagation();
event.preventDefault();
if (window.mysettings.dragging) {
window.mysettings.dragging = false;
$('#dropzone .overlay').remove();
}
}
function handleUpload(event) {
// Stop normal browser response.
event.stopPropagation();
event.preventDefault();
if (window.mysettings.dragging) {
window.mysettings.dragging = false;
$('#dropzone .overlay').remove();
}
// DO MY FILE UPLOAD STUFF HERE
}
【问题讨论】:
-
你不想用
dragenter代替dragover吗? -
也许吧。我换成了 dragenter 并且出现了同样的问题,尽管“闪烁”较少。
-
基本问题是当元素可见时会触发
dragLeave。我也有这个问题,尝试添加样式而不是添加和删除覆盖元素,但没有运气。 -
您可以用您的代码创建一个jsfiddle.net 吗?
标签: javascript jquery html dom