Javascript 可以找到HTML5文件上传的ETA吗?
我的网站上有一个html5文件上传脚本 它可以与这个progressbar脚本配合使用Javascript 可以找到HTML5文件上传的ETA吗?,javascript,jquery,html,Javascript,Jquery,Html,我的网站上有一个html5文件上传脚本 它可以与这个progressbar脚本配合使用 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
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(“Y-m-DH:i:s”);(来自php)在javascript中?要查找ETA,必须将代码更改为此。
这里所做的更改是我们有两个新变量,分别命名为startTime和now 上传一开始就放置var startTime,它的语法应该与var now相同 这个脚本将告诉用户完成的百分比,上传的kb/mb与总计kb/mb,现在是文件上传的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);
您可以推断自上传开始以来
e.loaded
的平均变化率,以估计需要多长时间。不过,没有办法确定。我在github示例中看到过类似的东西,但这太复杂了,我不知道它会有多复杂。获取上传开始时的时间,然后在每个进度
事件中计算ETA作为((总/加载)*已用时间)-已用时间
开始时间=新日期()。在每一个进步事件中都是如此。@jordanzhninja没问题。既然你已经解决了自己的问题,你应该把这个解决方案作为一个答案发布并接受它,这样以后的任何人都可以从中受益。