jquery 网页冻结,但所有循环都有中断条件

rseugnpd  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(103)

我正在尝试做一个网站,让你玩西蒙的游戏。但是它在我的第一次按键时就冻结了,这本应该开始游戏的。它可能陷入了一个无限循环,但我已经在每个循环中给出了中断条件。问题出在哪里?
我在我能想到的每一个地方都增加了破坏性的条件,但我不知道问题出在哪里。

$(document).ready(function () {
    var order_array = [];
    function press(j) {
        $("#" + j).addClass(("play_pressed"));
        //sound
        setTimeout(function () {
            $("#" + j).removeClass("play_pressed");
        }, 500);
    }
    function order_add() {
        var jk = Math.floor(Math.random() * 4);
        switch (jk) {
            case 0:
                var j = 'p';
                break;
            case 1:
                var j = 'q';
                break;
            case 2:
                var j = 'r';
                break;
            case 3:
                var j = 's';
                break;
            default:
                var j = 'p';
                break;
        }
        order_array.push(j);
        press(j);

    }

    function order_check() {
        var $k = true;
        $("h1").text("Click the keys in Order!");
        for (var i = 0; i < order_array.length && $k; i++) {
            $(".play").click(function (e) {
                if (order_array[i] != e.target.id) {
                    $k = false;
                }
            });

        }
        if (i < order_array.length - 1) {
            console.log(order_array);
            console.log(false);
            return false;
        }
        console.log(order_array);
        console.log(false);
        return true;
    }

    $(document).keypress(function (e) {
        $("h1").text("The game has begun!!");
        var $c = true;
        order_add();
        setTimeout(function () {
            $c = order_check();
        }, 1000);
        while ($c && order_array.length > 0) {
            order_add();
            setTimeout(function () {
                $c = order_check();
            }, 3000);

        }
        $("h1").text("The game has ended!!");
        $("body").addClass("end");

    });
}
)

字符串

yacmzcpb

yacmzcpb1#

此问题可能由以下原因导致:

while ($c && order_array.length > 0) {
  order_add();
  setTimeout(function () {
    $c = order_check();
  }, 3000);
}

字符串
因为您一遍又一遍地创建许多计时器,每个计时器都重叠。(我不太确定,但我很确定)。而在

setTimeout(function () {
  $c = order_check();
}, 3000);
$c = order_check();


如果我是对的,never会切换到false,所以Timeout函数不起作用。(或者我是哑巴)。

相关问题