【问题标题】:Using settimeout to queue functions in a delayed manner?使用 settimeout 以延迟方式对函数进行排队?
【发布时间】:2013-09-17 05:39:03
【问题描述】:

更新:我编辑了 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;
                }
            }


        });

【问题讨论】:

标签: javascript jquery


【解决方案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) {
    ..
}

【讨论】:

  • @MattBall 是的,刚刚看到了关闭问题
  • 这个以及上面帖子中的编辑代码不会运行任何东西。
  • @Jamil 我使用匿名回调函数做了一点改动
  • 这也不起作用..我将ij更改为传递给函数,即appendcharacter(drawcount, i, j)function appendcharacter(drawcount, i, j){},但这也没有解决它。
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2012-10-02
  • 2020-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
相关资源
最近更新 更多