4

サイトに html5 ファイル アップロード スクリプトがあります。

このプログレスバースクリプトで正常に動作します

xhr.upload.addEventListener("progress", function(e) {
            var pc = parseInt(100 - (e.loaded / e.total * 100));
            var pci = parseInt(e.loaded / e.total * 100);
            //get us our ETA
            //kilobytes or megabytes?
            var pcia = e.loaded / 1024;
            var pcia2 = e.total / 1024;
            if (pcia2 > 1024)
            {
                pcia = pcia / 1024
                pcia2 = pcia2 / 1024;
                progress.style.backgroundPosition = pc + "% 0";
                elapsedtime = startTime + new Date();
                alert(startTime);alert(new Date());
                var eta = ((e.total / e.loaded) * elapsedtime) - elapsedtime;
            progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " MB of " + Math.ceil(pcia2 * 100)/100 + " MB)-(" + eta +" secs. remaining)";
            }
            else
            {
                progress.style.backgroundPosition = pc + "% 0";
            progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " KB of " + Math.ceil(pcia2 * 100)/100 + " KB)-(" + eta +" secs. remaining)";
            }
        }, false);

わかりましたので、開始時刻と進行状況が呼び出される時刻を警告しました。しかし、変数 ETA は NaN として表示されます。date("Ymd H:i:s"); のようなものをどのように達成できますか? (phpから)JavaScriptで?

4

1 に答える 1

3

ETA を見つけるには、コードをこれに変更する必要があります。
ここで行われた変更は、startTime と now という名前の 2 つの新しい変数があることです。

アップロードが開始されるとすぐに var startTime を配置し、var now と同じ構文にする必要があります。

このスクリプトは、ユーザーに完了率、アップロードされたキロバイト/メガバイトと合計のキロバイト/メガバイト、およびファイル アップロードの ETA を通知します。

xhr.upload.addEventListener("progress", function(e) {

    var pc = parseInt(100 - (e.loaded / e.total * 100));
    var pci = parseInt(e.loaded / e.total * 100);
    //get us our ETA
    //kilobytes or megabytes?
    var pcia = e.loaded / 1024;
    var pcia2 = e.total / 1024;
    if (pcia2 > 1024)
    {
    pcia = pcia / 1024
    pcia2 = pcia2 / 1024;
    var now = (new Date()).getTime(); 
    var elapsedtime = now - startTime;
    elapsedtime = elapsedtime / 1000;
    var eta = ((e.total / e.loaded) * elapsedtime) - elapsedtime;
    eta = Math.round(eta);
    progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " MB of " + Math.ceil(pcia2 * 100)/100 + " MB)-(" + eta +" secs. remaining)";alert(pci); progress(pci, $('#progress'));
        }
        else
        {
        var now = (new Date()).getTime(); 
        var elapsedtime = now - startTime;
        elapsedtime = elapsedtime / 1000;
        var eta = ((e.total / e.loaded) * elapsedtime) - elapsedtime;
        progress.innerHTML = pci + "% (" + Math.ceil(pcia * 100)/100 + " KB of " + Math.ceil(pcia2 * 100)/100 + " KB)-(" + eta +" secs. remaining)"; progress(pci, $('#progress'));
                }
            }, false);
于 2013-08-17T09:39:34.343 に答える