0Pricing
JavaScript Academy · レッスン

ページへファイルをドラッグする

デスクトップからドロップされたファイルを処理します。

「ページへファイルをドラッグする」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。

デスクトップからのファイル

要素を移動するだけでなく、Drag and Drop API を使うと、ユーザーはオペレーティングシステムからページへファイルをドラッグできます。これはファイルアップロード用ドロップゾーンの基盤となります。

ファイルのドロップを受け付ける

設定方法は要素のドロップと同じで、dragover と drop でデフォルト動作を防止します。違いは、getData ではなくファイルを読み取ることです。

dropzone.addEventListener("dragover", (e) => e.preventDefault());

dataTransfer.files

ドロップ時の e.dataTransfer.files は、ドロップされた File オブジェクトの FileList です。

dropzone.addEventListener("drop", (e) => {
  e.preventDefault();
  const files = e.dataTransfer.files;
  console.log(files.length, "file(s) dropped");
});

ファイルを反復処理する

FileList は配列に似たオブジェクトです。スプレッド演算子で変換すると、配列メソッドを使って反復処理できます。

const files = [...e.dataTransfer.files];
files.forEach((file) => {
  console.log(file.name, file.size, file.type);
});

ファイルのメタデータ

各 File は、内容を読み取らなくても name、size(バイト数)、type(MIME タイプ)、lastModified を提供します。

console.log(file.name);          // "photo.png"
console.log(file.type);          // "image/png"
console.log(file.size);          // 20481

種類でフィルタリングする

処理する前にドロップされたファイルを検証してください。たとえば、画像だけを受け付けるようにします。

const images = files.filter((f) => f.type.startsWith("image/"));
if (images.length === 0) console.log("No images dropped");

ファイルの内容を読み取る

ファイルの読み取りには FileReader を使います。テキストには readAsText、プレビューには readAsDataURL を使います。

const reader = new FileReader();
reader.onload = () => console.log(reader.result);
reader.readAsText(file);

ドロップされた画像をプレビューする

URL.createObjectURL(file) を使うと、ファイル全体を読み取らずに即座にプレビュー URL を作成できます。メモリを解放するため、不要になったら URL を revoke してください。

const url = URL.createObjectURL(file);
img.src = url;
img.onload = () => URL.revokeObjectURL(url);

items と files

dataTransfer.items は files より多くの情報を持ちます。各 DataTransferItem は kind(「file」または「string」)を報告し、ファイルまたはディレクトリエントリを取得できます。

for (const item of e.dataTransfer.items) {
  if (item.kind === "file") {
    const file = item.getAsFile();
    console.log(file.name);
  }
}

ドロップされたファイルをアップロードする

ファイルを FormData に格納し、サーバーへ POST します。

const form = new FormData();
files.forEach((f) => form.append("files", f));
fetch("/upload", { method: "POST", body: form });

意図しないナビゲーションを防ぐ

ドロップゾーンの外にファイルをドロップすると、ブラウザーはそのファイルへ移動します。ドキュメント全体に対策を施して、この動作を止めてください。

window.addEventListener("dragover", (e) => e.preventDefault());
window.addEventListener("drop", (e) => e.preventDefault());

クイックチェック

ファイルのドロップをテストします。

まとめ: ファイルのドラッグ&ドロップ

ファイルのドロップゾーンを作成し、dataTransfer.files を読み取り、メタデータを調べ、種類でフィルタリングし、オブジェクト URL で画像をプレビューし、FileReader を使い、FormData でアップロードし、意図しないナビゲーションを防ぎました。これで Drag and Drop は完了です。

よくある質問

「ページへファイルをドラッグする」レッスンは無料ですか?

はい。「ページへファイルをドラッグする」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。

「ページへファイルをドラッグする」で何を学びますか?

デスクトップからドロップされたファイルを処理します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ページへファイルをドラッグする」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 要素をドラッグ可能にする
  2. ドロップ先と dataTransfer
  3. ドラッグ中の視覚的フィードバック
  4. ページへファイルをドラッグする
← JavaScript Academyに戻る