更新:我编辑了setTimeout()
代码来运行函数内的代码,但现在根本没有运行。我还更改了接受drawcount
,i
和j
的功能,拨打电话appendcharacter(drawcount, i, j)
。它仍然什么都不做(尽管最初它同时运行)。出于某种原因,setTimeout
在超时后没有正常运行该功能。
- 原始问题 -
我有以下代码(注意并未列出所有变量,只是相关或与此代码部分相关的内容)。我想错开appendcharacter(drawcount)
的运行,以便它以半秒的间隔运行,但这段代码在同一时间运行所有内容:
var $span, $br;
var $img = $('#image');
$(document).ready(function () {
var drawcount = 0;
for (var j = 0; j < imgwidth; j++) {
$("#image").append("<br>");
for (var i = 0; i < imgheight; i++) {
var timeout = 500 * drawcount;
console.log(timeout);
setTimeout(function () {
appendcharacter(drawcount, i, j);
},timeout);
drawcount++;
}
}
function appendcharacter(drawcount, i, j) {
$span = $("<span id='" + i + "_" + j + "' style='position:relative; display: inline; color: rgba(" + pixels[j][i].red + " , " + pixels[j][i].green + " , " + pixels[j][i].blue + ", 1);'></span>").appendTo($img);
switch (drawcount % 18) {
case 0:
$("#" + i + "_" + j).append("/");
break;
case 2:
$("#" + i + "_" + j).append("-");
break;
case 3:
$("#" + i + "_" + j).append("/");
break;
case 4:
$("#" + i + "_" + j).append("-");
break;
case 5:
$("#" + i + "_" + j).append("/");
break;
case 6:
$("#" + i + "_" + j).append("-");
break;
case 7:
$("#" + i + "_" + j).append("(");
break;
case 8:
$("#" + i + "_" + j).append("8");
break;
case 9:
$("#" + i + "_" + j).append("8");
break;
case 10:
$("#" + i + "_" + j).append(")");
break;
case 11:
$("#" + i + "_" + j).append("-");
break;
case 12:
$("#" + i + "_" + j).append("\\");
break;
case 13:
$("#" + i + "_" + j).append("-");
break;
case 14:
$("#" + i + "_" + j).append("\\");
break;
case 15:
$("#" + i + "_" + j).append("-");
break;
case 16:
$("#" + i + "_" + j).append("\\");
break;
case 17:
$("#" + i + "_" + j).append(" ");
break;
}
}
});
答案 0 :(得分:1)
您正在调用函数appendcharacter
并将其返回的值作为回调传递给setTimeout
方法。
您需要将函数引用传递给将被调用的setTimeout
,您还需要使用本地闭包函数,因为在回调中引用了共享变量drawcount
(function(drawcount, i, j){
setTimeout(function () {
appendcharacter(drawcount, i, j);
}, timeout);
})(drawcount, i, j)
您还需要将i和j作为aprams传递给appendcharacter
离
function appendcharacter(drawcount, i, j) {
..
}