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,您必须将代码更改为此。
这里所做的更改是我们有 2 个新变量,名为 startTime 和 now。

上传开始后立即放置 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 回答