如何在Javascript dragenter事件期间判断拖动的内容是文本还是文件
使用dragenter事件,我在网页上显示了一个dropzone,以便快速上传已删除的文件,而且效果良好。但是,拖动选定文本时也会弹出dropzone。如何在早期区分差异如何在Javascript dragenter事件期间判断拖动的内容是文本还是文件,javascript,file-upload,drag-and-drop,dom-events,Javascript,File Upload,Drag And Drop,Dom Events,使用dragenter事件,我在网页上显示了一个dropzone,以便快速上传已删除的文件,而且效果良好。但是,拖动选定文本时也会弹出dropzone。如何在早期区分差异 我知道drop事件公开了所有要使用dataTransfer.files进行迭代的文件内容,但那太晚了。我需要它在dragenter,只有我看到文件数组在任何时候都是空的 我需要完全控制look&feel,我不是在寻找现有的lib 当拖动文本与文件时,我可以看到事件.dataTransfer.Clipboard.effectAl
好吧,我已经取得了足够的进步,在Chrome和Firefox(3.6+)上取得了显著的进步。这可能不是万无一失的,但如果有人觉得它有用,下面是代码:
var isFileTransfer = false;
if (evt.dataTransfer.types) {
for (var i=0; i<evt.dataTransfer.types.length; i++) {
if (evt.dataTransfer.types[i] == "Files") {
isFileTransfer = true;
break;
}
}
}
var isFileTransfer=false;
if(evt.dataTransfer.types){
对于(var i=0;i我编写了一个小函数来检测文件的拖动
function isFileTransfer(evt){
return [].some.call(evt.dataTransfer.types,function(t){return t=="Files";});
}
我需要确定文件是从外部拖到浏览器中,还是从浏览器窗口内拖到图像中。我通过在文档对象上侦听dragstart来确定。当文件从外部拖到浏览器中时,dragstart不会启动。因此,如果如果启动,则表示同一页面中的某些内容正在被拖动
document.addEventListener('dragstart', function() {
samePageDrag = true;
}, false);
document.addEventListener('dragend', function() {
if (samePageDrag) {
samePageDrag = false;
}
}, false);
使用此选项,您可以在dragenter或dragover事件后检查samePageDrag的值,以确定所拖动的内容是否来自浏览器外部。如果OP返回,请将此标记为答案。这对我很有效!我发现需要为“drop”事件添加另一个侦听器正确清除'samePageDrag'变量,但这正是我所需要的。