ドラッグアンドドロップ対応画像アップロード

jquery

 

JQUERYを使って、ドラッグアンドドロップのアップロードを実装する方法。

 

HTML

<div class="drop-area">
    <label>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
            <path d="M19.479 10.092c-.212-3.951-3.473-7.092-7.479-7.092-4.005 0-7.267 3.141-7.479 7.092-2.57.463-4.521 2.706-4.521 5.408 0 3.037 2.463 5.5 5.5 5.5h13c3.037 0 5.5-2.463 5.5-5.5 0-2.702-1.951-4.945-4.521-5.408zm-7.479-1.092l4 4h-3v4h-2v-4h-3l4-4z"/>
        </svg>
        <input type="file" name="media" accept="image/jpeg, image/png" class="uploader">
        <div class="preview-area"></div>
    </label>
</div>

 

CSS

.drop-area {
    border: 2px dashed #C8C8C8 !important;
    background-color: #F0F0F0 !important;
    border-radius: 5px;
    padding: 30px;
    text-align: center;
}
.drop-area label {
    width: 100%;
    display: inline-block;
}
.drop-area label:hover {
    cursor: pointer;
}
.drop-area label input {
    display: none;
}
.drop-area label svg {
    width: 50px;
    fill: currentColor;
    color: #909090;
}
.drop-area label .preview-area {
    width: 75%;
    margin: 15px auto;
    height: 200px;
}
.drop-area label .preview-area img {
    height: 100%;
    max-width: 100%;
    width: auto;
}

 

Jquery

$(window).on("load",function(){
  //ドラッグ&ドロップ時の操作
  $(document).on('drop', '.drop-area' ,function (event) {
    $(this).find('.uploader')[0].files=event.originalEvent.dataTransfer.files
    $(this).find('.uploader').trigger('change')
  })

  //ドロップエリア以外のドロップ禁止
  $(document).on('dragenter dragover drop', function (event) {
    event.stopPropagation()
    event.preventDefault()
  })

  //ファイルがアップロードされたらプレビューエリアに表示
  $(document).on('change','.drop-area .uploader',function(e) {
    let thiss = $(this)
    let fileReader = new FileReader()
    fileReader.onload = (function () {
      let imgTag = `<img src='${fileReader.result}'>`
      thiss.closest(".drop-area").find(".preview-area").html(imgTag)
    })
    fileReader.readAsDataURL(e.target.files[0])
  })
})