ページへファイルをドラッグする
デスクトップからドロップされたファイルを処理します。
「ページへファイルをドラッグする」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 要素をドラッグ可能にする
- ドロップ先と dataTransfer
- ドラッグ中の視覚的フィードバック
- ページへファイルをドラッグする