使用settimeout以延迟方式排队函数?

时间:2013-09-17 05:39:04

标签: javascript jquery

更新:我编辑了setTimeout()代码来运行函数内的代码,但现在根本没有运行。我还更改了接受drawcountij的功能,拨打电话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;
                }
            }


        });

1 个答案:

答案 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) {
    ..
}