html5 filereader APIを使用して、ユーザーが写真をアップロードしなくてもローカルで写真を取得しています。
これをサポートするブラウザーでは、複数の選択を許可しているため、選択したファイルをループして、以下に示すように各ファイルで関数(TC.editor.renderSlide())を実行しています。
handlePhotoUploads: function(event) {
var self = this;
TC.dialog.destroy();
var files = event.target.files;
var count = files.length + TC.editor.cache.slides.length;
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
var index = TC.editor.getNewSlidesIndex();
TC.editor.addNewSlide('photo', index);
reader.onload = (function(theFile) {
var slideindex = index;
return function(e) {
TC.editor.renderSlide(slideindex, e.target.result, 'internal', count);
};
})(f);
reader.readAsDataURL(f);
}
},
問題は、TC.editor.renderSlide()関数の実行にかなりの時間がかかる可能性があるため(キャンバスおよびDOM操作を実行する)、8つほどの大きな画像ファイルを処理するときにブラウザーがかなりの時間ロックされることです。'処理gifでさえ、この期間中はアニメーション化を停止します。
各reader.onloadイベントが、前のイベントが完了した後にのみ発生するようにする方法はありますか?このように、すべてが処理されている間ブラウザをロックする現在の状況ではなく、TC.editor.renderSlide()への各呼び出しの結果を個別に確認することで、ユーザーに定期的な進行状況の更新が提供されますか?
単純なsetTimeoutをrenderSlide()に追加しようとしましたが、役に立ちませんか?
どんな助けやアイデアも大歓迎です。