0

setTimeout()更新:関数内でコードを実行するようにコードを編集しましたが、何も実行されません。また、呼び出しを行うdrawcounti、およびを受け入れるように関数を変更しました。まだ何もしません (最初はすべて同時に実行されていましたが)。何らかの理由で、タイムアウト後に関数が正しく実行されていません。jappendcharacter(drawcount, i, j)setTimeout

--元の質問--

私は次のコードを持っています(すべての変数がリストされているわけではなく、コードのこのセクションに関連するものまたはあったものだけがリストされていることに注意してください)。の実行をずらしてappendcharacter(drawcount)0.5 秒間隔で実行したいのですが、このコードはすべてをまったく同時に実行します。

        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;
                }
            }


        });
4

1 に答える 1

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) {
    ..
}
于 2013-09-17T05:40:50.690 に答える