【问题标题】:HTML5 Drag and Drop only imagesHTML5 仅拖放图像
【发布时间】:2014-11-23 17:34:50
【问题描述】:

我要做的是:如果所有拖动的文件都是图像,则将其丢弃,但如果有其他文件扩展名,则不要丢弃它们,而仅丢弃图像。 p>

这是我的尝试:

HTML:

<div id="dropzone"></div>

Javascript:

var dropzone = document.getElementById("dropzone");

dropzone.ondrop = function (e) {
    e.preventDefault();
    e.stopPropagation();

    var files = e.dataTransfer.files;
    for(x = 0; x < files.length; x = x + 1){
        if(files[x].type.split("/")[0] == 'image') {
            console.log(files[x].name + "is image");
        }else {
            console.log(files[x].name + "is not image");
        }
    }
}

我需要遍历我拖动的文件,如果文件是图像,则执行其他操作,例如

file.jpeg is image
file.txt is not image

但是使用我的代码,如果我使用图像拖动其他文件扩展名,它不会丢弃图像,它会跳过这两个文件。

重点是:仅丢弃图像。

【问题讨论】:

    标签: javascript jquery html image drag-and-drop


    【解决方案1】:

    您可以使用 FileReader 并测试图像的文件类型,如下所示:

    // don't try to process non-images
    var imageType = /image.*/;
    if (file.type.match(imageType)) {
       // it's an image, process it
    }
    

    这是示例代码和演示:

    // dropzone event handlers
    var dropzone;
    dropzone = document.getElementById("dropzone");
    dropzone.addEventListener("dragenter", dragenter, false);
    dropzone.addEventListener("dragover", dragover, false);
    dropzone.addEventListener("drop", drop, false);
    
    //
    function dragenter(e) {
        e.stopPropagation();
        e.preventDefault();
      }
      //
    
    function dragover(e) {
      e.stopPropagation();
      e.preventDefault();
    }
    
    //
    function drop(e) {
      e.stopPropagation();
      e.preventDefault();
    
      var dt = e.dataTransfer;
      var files = dt.files;
    
      handleFiles(files);
    }
    
    //
    function handleFiles(files) {
    
        for (var i = 0; i < files.length; i++) {
    
          // get the next file that the user selected
          var file = files[i];
          var imageType = /image.*/;
    
          // don't try to process non-images
          if (!file.type.match(imageType)) {
            continue;
          }
    
          // a seed img element for the FileReader
          var img = document.createElement("img");
          img.classList.add("obj");
          img.file = file;
    
          // get an image file from the user
          // this uses drag/drop, but you could substitute file-browsing
          var reader = new FileReader();
          reader.onload = (function(aImg) {
            return function(e) {
              aImg.onload = function() {
    
                  // draw the aImg onto the canvas
                  var canvas = document.createElement("canvas");
                  var ctx = canvas.getContext("2d");
                  canvas.width = aImg.width;
                  canvas.height = aImg.height;
                  ctx.drawImage(aImg, 0, 0);
    
                  // make the jpeg image
                  var newImg = new Image();
                  newImg.onload = function() {
                    newImg.id = "newest";
                    document.body.appendChild(newImg);
                  }
                  newImg.src = canvas.toDataURL('image/jpeg');
                }
                // e.target.result is a dataURL for the image
              aImg.src = e.target.result;
            };
          })(img);
          reader.readAsDataURL(file);
    
        } // end for
    
      } // end handleFiles
    body {
      background-color: ivory;
    }
    canvas {
      border: 1px solid red;
    }
    #dropzone {
      border: 1px solid blue;
      width: 300px;
      height: 300px;
    }
    <h4>Drag file(s) from desktop to blue dropzone.<br>Only image files will be processed.</h4>
    <div id="dropzone"></div>
    <div id="preview"></div>

    【讨论】:

    • 你做得很好@markE .. 真的找不到感谢你的方法!但还有一个问题,在这种情况下,如何拖放文件夹并读取文件夹中的文件?抱歉打扰了。
    • 除了 Chrome(请参阅 DirectoryReader)之外,文件 API 可用于单独选择的文件,而不是文件夹/目录。您的用户必须打开该文件夹并从该打开的文件夹中选择文件。祝你的项目好运!
    • 感谢您的信息♥
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2021-06-08
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多