|
D-WEBトップ | ニュース | スポーツ | 芸能 | 2024年カレンダー | ベストセラー | 料理レシピ百科 | ログファイル一覧 |
HTML5 - ファイルアップロード プログレスバー付 (2014/9/30) |
XPのサポート終了をきっかけに、ブラウザも一斉にIE11が主流になるという大変な変化が起こっています。IE11はWindows8のタッチパネル用のタッチイベントという独自の規格を装備していて、マウス操作がうまく動かないという現象が起きていました。その修正をしていたついでに、これが主流になるなら、HTML5とAjaxを使用した、複数ファイルアップロードを作ることにしました。jQueryを使用しない自前のAjaxでできてるので、jQueryのバージョンアップやIE対応を待つ必要がなく、自分で拡張したり、応用することができます。プログレスバーはその応用で作りました。ちなみに、jQueryで全て作っている人は、前述のIE11のタッチイベントの問題は、自力では解決できません。 複数ファイルの選択ができますか?お手持ちのブラウザで試してください。 対応のブラウザ 不便だったファイル送信 ようやく使えるmultiple属性 ↑上記の複数ファイル選択のタグです。 Ajaxファイルアプリケーション //Fileと.FormDataが使用できるか調べる window.onload = function(){ if (window.File && window.FormData){ document.fm01.fapi.value = 1 ; } } //別フォームへ指定の1ファイルをコピー var fm = document.fmwk; var fdata = new FormData(fm); var fw = document.form1.fs.files[ban-1]; fdata.append("afile",fw); //Ajaxでフォームを送信 (※概要です) var req = new XMLHttpRequest(); //プログレス用のイベントハンドラを設定 req.upload.addEventListener('progress',progress_s,false); //コールバック関数を設定 req.onreadystatechange = function(){ resp_s(mode,ban,req); } //aurl=受信URL req.open("POST",aurl,true); req.send(fdata); プログレスバーを作成
?
//プログレス ハンドラ function progress_s(evt) { if (evt.lengthComputable) { var lsu = evt.loaded; var tsu = evt.total; var per = Math.round(lsu * 100 / tsu); document.getElementById('progress').style.width = per + "%"; } } プログレスバーボックスモデル <div style="width:270px;height:10px; background:#dcdcdc;"> <div id="progress" style="width:150px;height:10px; background-color:#8FC31F;font-size:2px"> </div> </div> プログレスバー全ファイル //プログレス ハンドラ //f_ban filesu はグローバル function progress_s(evt) { if (evt.lengthComputable) { var bun = evt.loaded / evt.total; var fsumi = (f_ban - 1) / filesu; var fbun = 1 / filesu * 0.75 ; var fper = Math.round((fsumi + (fbun * bun)) * 100); document.getElementById('progressf').style.width = fper + "%"; } } //コールバック関数(1ファイル終了) function refs_s(ban,rtxt){ …… …… var per = Math.round(ban * 100 / filesu); document.getElementById('progressf').style.width = per + "%"; } ドラッグ&ドロップは延期 |
スポンサー リンク
|