こんにちわ。
職人見習いの小森です。
今回は、HTML5のプログレスバーについてまとめます。
HTML5 ファイル 読み込みの記事で作成したものに追加します。
○index.html
id="fileinfo"id="Contents"
progressタグを利用します。
○file.js
window.addEventListener("load",function(){
if(!window.file){
ele.innerHTML = "File APIが使用できません"
return;
}
var ele = document.getElementById("fileinfo");
document.getElementById("read").addEventListner("click",function(){
var textFile = document.getElementById("filedata").files[0];
if(textFile.type.indexOf("text/") != 0 ){
ele.innerHTML += "ファイルはテキストではない";
return;
}
var pr;
pr = document.getElementById("loadstatus");
var reader;
reader = new FileReader();
reader.onload = function(evt){
var totalData = evt.total;
pr.innerHTML = "100%("+totalData+"/"+totalData+" Byte)";
pr.vlaue = 100;
var text = evt.target.result;
document.getElementById("Contents").textContent = text;
}
reader.onerror = function(evt){
var errorNo = evt.target.error.code;
ele.innerHTML += "エラー:"+errorNo;
}
reader.onprogress = function(evt){
var lodingData = evt.loaded;
var totalData = evt.total;
var per = (loadData/totalData) * 100;
per = per.toFixed(1);
pr.innerHTML = per+"% ("+totalData+"/"+totalData+" Byte)";
pr.value = per;
}
reader.onloadend = function(evt){
//読み込み完了時のイベント
}
reader.readAsText(textFile,"utf-8");
},true);
},true);
FileReaderオブジェクトのonprogressイベントで、Eventオブジェクトのloadedプロパティで読込のトータルサイズ、totalプロパティでファイルサイズがわかるので、そこから計算した結果をプログレスバーのvalueプロパティに入力します。
onprogressイベントが実行されるたびにプログレスバーのvalueプロパティが更新されてるのでバーが動いているように見えます。
さらにinnerHTMLも更新することでプログレスバー未対応ブラウザでも進捗を確認することができます。
注意事項として選択したファイルが全て読み込まれた場合に、必ずprogressイベントが実行される保証がないので、onloadイベントを定義して読込完了時にprogressと同様の処理が実行されるようにしておきます。
※この記事は、なかの人(spitz8008)が書いています。