Javascriptファイルをドラッグアンドドロップ出来るアップロードフォーム

JavaScript コンピュータ
JavaScript
アップロードするファイルをドラッグアンドドロップするフォームを良く見受けます。サンプルを作成してみました。
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>タイトル</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  </head>
  <body>
    <div id="upload-area" style="cursor: pointer; text-align:center; padding: 10px; border-radius:4px; font-size:small; border:solid 1px #eee;" onclick="$('#upload-form-fileselect').click()">
      ドロップしてください<br />
    </div>
    <form method="post" name="form1"  enctype="multipart/form-data">
      <input type="file" id="upload-form-fileselect" name="upfile" multiple="multiple">
      <input type="submit" id="upload-form-submit" value="送信">
    </form>
    <script>

$(document).ready(function () {

    $("#upload-area").on("dragenter", function(e){
        $("#upload-area").css("background", "#EEE");
    });
    $("#upload-area").on("dragleave", function(e){
        $("#upload-area").css("background", "#DDD");
    });
    $("#upload-area").on("drop", function(e){
        document.getElementById("upload-form-fileselect").files = e.originalEvent.dataTransfer.files;
        $("#upload-area").css("background", "#FFF");
    });
    $(document).on("dragover", function(e){
        e.preventDefault();
    });
    $(document).on("drop", function(e){
        e.preventDefault();
    });
});

    </script>
  </body>
</html>

・フォームを表示

・画像ファイルをドラッグすると背景が灰色に変化

・ドロップするとフォームのファイル項目にファイル名がセット

ドラッグエリアでdragenterイベント(ドラッグエリアに入った)とdragleaveイベント(ドラッグエリアから離れた)で背景色を変更しています。
ドラッグエリアでdropイベントでe.originalEvent.dataTransfer.filesでファイルのパスを取得し、formのファイル項目にセットします。
ドラックエリア以外のdocumentに対するdropイベント及びdragoverイベントはe.preventDefault()で基本何もしない。

もしドラッグアンドドロップをきっかけにアップロードをする場合

  • HTMLのformの不可視
  • ファイル項目のchangeイベントでformの送信するJavascriptのコードを記述
  • dropイベントでファイル項目にセット後ファイル項目のchangeイベントを発生させる。
  • アップロードのキャンセル機能をつけるかはお好みで。

    概ねドラッグアンドドロップの流れは掴めたと思います。

コメント