![](/img/trans.png)
[英]Android Webview Javascript click event not fireing as it should
[英]Javascript For Loop To Slow for Progress Event Listener Fireing
我正在尝试根据上传进度更改元素背景颜色。 与触发的进度事件侦听器相比,我遇到的问题是for循环是减慢速度的方法。 有什么我可以做的吗?
var colors = [
"#fff2f2",
"#ffe6e6",
"#ffd9d9",
"#ffcccc",
"#ffbfbf",
"#ffb3b3",
"#ff9999",
"#ff7373",
"#ff8080",
"#ff5959",
"#ff4d4d",
"#ff4040",
"#ff3333",
"#ff2626",
"#ff1919",
"#ff0d0d",
"#ff0000",
]
var first = 0;
var last = 5;
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", updateProgress, false);
var foo = document.getElementById("uploadScreen");
var form = document.getElementById("uploadForm");
var percentComplete;
xhr.open("POST", "php/upload.php", true);
xhr.send(new FormData(form));
function updateProgress(event) {
if (event.lengthComputable) {
percentComplete = Math.round(event.loaded / event.total * 100);
for (i=0; i < colors.length; i++) {
if (percentComplete > first && percentComplete < last ) {
console.log(foo.style.backgroundColor = colors[i]);
break;
}
}
first = first +5;
last = last +5;
} else {
alert("no no");
}
}
而不是将整数作为百分比,而是将其保留为0到1之间的值。然后将其乘以数组的长度即可得到正确的索引。
var percentComplete = event.loaded / event.total;
var index = Math.round(percentComplete * (colors.length - 1)); // Subtract 1 to account for zero based indexing
foo.style.backgroundColor = colors[index];
var colors = [
"#fff2f2",
"#ffe6e6",
"#ffd9d9",
"#ffcccc",
"#ffbfbf",
"#ffb3b3",
"#ff9999",
"#ff7373",
"#ff8080",
"#ff5959",
"#ff4d4d",
"#ff4040",
"#ff3333",
"#ff2626",
"#ff1919",
"#ff0d0d",
"#ff0000",
]
var first = 0;
var last = 5;
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", updateProgress, false);
var foo = document.getElementById("uploadScreen");
var form = document.getElementById("uploadForm");
var percentComplete;
xhr.open("POST", "php/upload.php", true);
xhr.send(new FormData(form));
function updateProgress(event) {
if (event.lengthComputable) {
percentComplete = Math.round(event.loaded / event.total * 100);
var i=praseInt(percentComplete/5);
console.log(foo.style.backgroundColor = colors[i]);
} else {
alert("no no");
}
}
我认为在这种情况下无需使用for循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.