如何检测用户何时在浏览器当前选项卡视口中放置图像?

aim*_*mme 2 javascript jquery drag-and-drop

我想知道如何进行拖放图像上传。我不明白的是如何让服务器知道用户何时将图像放入某个 div 或上传到正文?是否支持所有常见的浏览器,即,ff,chrome,safari。谢谢你 :)

Sha*_*ter 5

我可以告诉你没有做太多研究。

简短的回答是,不。没有所有主要浏览器都支持的方法可以检测用户何时在客户端窗口内放置图像。

此外,正如 Rajat Saxena 在评论中指出的那样,您必须通过在 drop 事件上发送 ajax 请求来通知服务器文件丢失。


HTML5

这是使用 HTML5 和 javascript从桌面拖放到浏览器

<div id="drop_zone">Drop files here</div>
<output id="list"></output>

<script>
  function handleFileSelect(evt) {
    evt.stopPropagation();
    evt.preventDefault();

    var files = evt.dataTransfer.files; // FileList object.

    // files is a FileList of File objects. List some properties.
    var output = [];
    for (var i = 0, f; f = files[i]; i++) {
      output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
                  f.size, ' bytes, last modified: ',
                  f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
                  '</li>');
    }
    document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
  }

  function handleDragOver(evt) {
    evt.stopPropagation();
    evt.preventDefault();
    evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy.
  }

  // Setup the dnd listeners.
  var dropZone = document.getElementById('drop_zone');
  dropZone.addEventListener('dragover', handleDragOver, false);
  dropZone.addEventListener('drop', handleFileSelect, false);
</script>
Run Code Online (Sandbox Code Playgroud)

查询

这是使用 JQuery(Firefox 和 Chrome)从桌面到浏览器拖放

function ignoreDrag(e) {
  e.originalEvent.stopPropagation();
  e.originalEvent.preventDefault();
}

$('#target')
    .bind('dragenter', ignoreDrag)
    .bind('dragover', ignoreDrag);
    .bind('drop', drop);

function drop(e) {
  ignoreDrag(e);
  var dt = e.originalEvent.dataTransfer;
  var files = dt.files;

  if(dt.files.length > 0){
    var file = dt.files[0];
    alert(file.name);
  }
}
Run Code Online (Sandbox Code Playgroud)

其他相关插件链接(未测试)和问题