ドラッグ&ドロップしよう! (5/5)
作成:2010-11-30 11:52
更新:2010-11-30 11:54
更新:2010-11-30 11:54
■ドラッグ&ドロップでファイルを読み込むには?
HTML5のドラッグ&ドロップは、HTMLのWebページ内にある要素だけしか使えないわけではありません。Webブラウザ外にあるものをドロップすることもできるのです。その一例が「ファイル」です。ファイルをドラッグ&ドロップしてページ内にその内容を読み込んで表示させる、なんてことも可能なのです。
ただし、そのためにはHTML5でファイルを扱うための「File API」というものについて理解していないといけません。このAPIについては別の記事にゆずるとして、実際にファイルをドロップするサンプルを作ってみましょう。ここでは、イメージをドラッグ&ドロップして<img>タグに表示させてみます。
まず、HTML側に、下のリストに挙げたような形で<img>タグを用意してください。続いて、script.js側に、下のリストにあるdoDragOverとdoDropを用意してください。これでイメージファイルをドラッグ&ドロップして表示させることができるようになります。
ここでは、doDragOverでドロップされたオブジェクトの形式が"Files"かどうかをチェックしています。これでファイルを受け入れることができるようになります。
doDropでは、ドロップされたファイルを読み込んで<img>のsrcに設定をしています。ドロップされたファイル類は、event.dataTransferの「files」にまとめられています。これはFileListオブジェクトとなっており、ここにドロップされたファイルがまとめられています。ここでは、event.dataTransfer.files[0]で最初のファイルを取り出し、これを読み込むことにしています。
ファイルからのデータの読み込みは、FileReaderというものを使って行っています。readAsDataURLというメソッドでファイルの中身をすべて読み込み、onloadendイベントで読み込み完了したらresult(読み込んだ内容)を<img>のsrcに設定しています。
ファイル関係については別途調べるとして、このようにドラッグ&ドロップを利用することで、ファイルの読み込みも簡単に行えるようになった、ということはぜひ覚えておきましょう。
ただし、そのためにはHTML5でファイルを扱うための「File API」というものについて理解していないといけません。このAPIについては別の記事にゆずるとして、実際にファイルをドロップするサンプルを作ってみましょう。ここでは、イメージをドラッグ&ドロップして<img>タグに表示させてみます。
まず、HTML側に、下のリストに挙げたような形で<img>タグを用意してください。続いて、script.js側に、下のリストにあるdoDragOverとdoDropを用意してください。これでイメージファイルをドラッグ&ドロップして表示させることができるようになります。
ここでは、doDragOverでドロップされたオブジェクトの形式が"Files"かどうかをチェックしています。これでファイルを受け入れることができるようになります。
doDropでは、ドロップされたファイルを読み込んで<img>のsrcに設定をしています。ドロップされたファイル類は、event.dataTransferの「files」にまとめられています。これはFileListオブジェクトとなっており、ここにドロップされたファイルがまとめられています。ここでは、event.dataTransfer.files[0]で最初のファイルを取り出し、これを読み込むことにしています。
ファイルからのデータの読み込みは、FileReaderというものを使って行っています。readAsDataURLというメソッドでファイルの中身をすべて読み込み、onloadendイベントで読み込み完了したらresult(読み込んだ内容)を<img>のsrcに設定しています。
ファイル関係については別途調べるとして、このようにドラッグ&ドロップを利用することで、ファイルの読み込みも簡単に行えるようになった、ということはぜひ覚えておきましょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※Webページに用意するドロップ用の要素
<img id="img1" ondragover="doDragOver(event);"
ondrop="doDrop(event);"
class="droppable">
※script.jsに用意するスクリプト
function doDragOver(event){
var type = event.dataTransfer.types.contains("Files");
if (type){
event.preventDefault();
}
}
function doDrop(event){
var img = document.getElementById("img1");
var file = event.dataTransfer.files[0];
var reader = new FileReader();
reader.onloadend = function() {
img.src = reader.result;
}
reader.readAsDataURL(file);
}
※関連コンテンツ
「JavaScriptによるHTML5プログラミング入門」に戻る