我有一个盒子网格(3x2),我想在一个循环中更新它,因为它有大量 rgb 值表示随时间变化的颜色。数组的一个元素的示例如下所示:
[[99.58221354166666, 99.20004050925925, 100.86330150462963], [59.431727430555554, 58.59181712962963, 61.26002314814815], [59.824817708333335, 58.83816550925926, 61.85647280092593], [93.02857349537037, 95.04584201388889, 92.13913194444444], [48.46075810185185, 50.74021701388889, 46.878373842592595], [84.57517939814815, 173.51900462962962, 62.35618923611111]]
下面的代码完美地处理了 rgb 值和所有内容。数组的每个元素对应于 3x2 网格中的一个“盒子”。不幸的是,我的循环似乎有一个关闭问题,我无法弄清楚。它仅在最后一次迭代时更新网格的颜色。所以我重写了它来存储一个函数列表,然后调用它们,但我不知道它是否只是执行得太快以至于我看不到它,或者它是否真的失败了。如果我添加一个睡眠,脚本将挂起,无论它挂在哪里,它都会更新那一刻,直到我单击继续脚本。之后它会向我显示最后一次更新(所以我已经从看到最后一次更新到看到两个带有明显挂起的脚本)。
c1 = $("#cell1");
c2 = $("#cell2");
c3 = $("#cell3");
c4 = $("#cell4");
c5 = $("#cell5");
c6 = $("#cell6");
var cells = [c1, c2, c3, c4, c5, c6];
$(document).ready(function() {
$.each(test, function(iGrid, grid) {
var ary_rgb = [];
var property = "background";
var updates = [];
$.each(grid, function (iBox, box) {
var r = Math.floor(box[0]).toString();
var g = Math.floor(box[1]).toString();
var b = Math.floor(box[2]).toString();
var rgb = 'rgb(' + r + ',' + g + ',' + b + ')';
updates[iBox] = function () { return cells[iBox].css(property, rgb); };
});
for (var i=0; i<updates.length;i++) {
updates[i]();
}
});
});
我确实花了几个小时试图让这个工作和阅读 SO 和其他关于关闭的网站,但我只是看不出我做错了什么。如果需要,我可以发布其余的 html。