JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

HTML5で複数のプログレスバー付きファイルアップロードを実装する方法

複数ファイルアップロードでプログレスバーを個別に動かすには

HTML5のXMLHttpRequest(XHR)を使って複数のファイルをアップロードする場合、ファイルごとに進捗状況を示すプログレスバーを表示したいことがよくあります。しかし、この機能を正しく動作させるには、少し工夫が必要です。

問題の原因は、xhrprogress イベントが、すべてのリスト項目(li要素)の作成が完了した後に発火するという点にあります。そのため、イベント発生時にどのプログレスバーを更新すべきかを、XHR側が把握できるようにする必要があります。

解決策:XHRに対応するリスト項目を紐付ける

具体的には、アップロード対象のリスト項目への参照を xhr.upload オブジェクトに直接持たせます。こうすることで、イベント発生時にどの要素を更新すればよいかを判別できるようになります。

var a = new XMLHttpRequest();
a.upload.li = li;

a.upload.addEventListener('progress', function(e) {
    var pc = parseInt(event.loaded / event.total * 100);
    this.li.find(".progressbar").width(pc);
}, false);

コードのポイント

  • a.upload.li = li; で、uploadオブジェクトに対象のリスト項目への参照を保存します。
  • progress イベント内では、event.loadedevent.total からアップロードの進捗率(%)を計算します。
  • this.li を使うことで、イベントを発火したXHRに紐付いたリスト項目だけを更新でき、複数ファイルの同時アップロードでも各プログレスバーが正しく動作します。

この方法を使えば、複数ファイルを同時にアップロードする場合でも、それぞれのファイルに対応したプログレスバーを独立して動かすことができます。

  1. HTML5 Canvasでマルチクリックイベントを実装する方法

    HTML5 Canvasでマルチクリックイベントを実装する方法 HTML5のCanvasは、図形そのものに対して個別のイベントハンドラを設定できません。しかしPath2Dオブジェクトを活用すれば、1つのキャンバス上に描いた複数の領域(パス)それぞれに対して、クリック判定を行うことが可能です。 例えば、円を描いてその一部を赤色、別の部分をグレー色で塗り分けたケースを考えてみましょう。赤色の部分がクリックされたときには「関数1」を呼び出し、グレーの部分がクリックされたときには「関数2」を呼び出します。これを実現するには、判定したい各領域を再利用可能なPath2Dオブジェクトとして保存しておく必要が

  2. Windows 11で複数のWebサイトを一括で開くショートカットの作り方【AutoStarter X4活用術】

    Windows 11では、デスクトップを右クリックして「新規作成」>「ショートカット」を選択し、URLを入力することでWebサイトのショートカットを作成できます。しかし、この方法では複数のWebサイトを一度に開くショートカットを作ることはできません。また、ブラウザにも複数のWebページのデスクトップショートカットを作成する機能は用意されていません。 複数のWebサイトを開くショートカットを設定するには、通常はバッチファイルのスクリプトを作成する必要があります。バッチファイルに慣れたユーザーにとっては簡単な作業ですが、スクリプト作成経験のない方にはハードルが高いでしょう。そこで便利なのが、