我正在忙着制作纸牌游戏。我想给用户一个可见的倒计时,然后在屏幕上显示一张卡片。我的倒计时脚本如下所示:

let downSeconds = 5;
while (downSeconds > 0) {
    setTimeout(function() {
        $("#timerDisplay").text = downSeconds;
        downSeconds--;
    }, 1000);
}

$(".detail-card").removeClass("hidden");


如果我不想要更新的秒数,我将使用5000ms的“ setTimeOut”。在尝试使用setInterval之前,我做了一下,延迟为1000ms,因此每次经过它都会更新秒。

现在,如果我在setTimeOut回调的任一行上都设置了一个断点,并且仅在该断点处调用setTimeout时什么也没有发生,所以秒显示永远不会更新,并且我陷入了无限循环,因为不会被调用,因此downSeconds--;始终保持值为5。

我究竟做错了什么?

最佳答案

setTimeout稍后运行代码,而while循环运行“ now”。您无法成功地将两者结合起来。.因此,您必须以不同的方式编写代码,这样的方法应该起作用:

let downSeconds = 5;
function doCountDown() {
    downSeconds--;
    $("#timerDisplay").text = downSeconds;
    if (downSeconds > 0) {
        setTimeout(doCountDown, 1000);
    } else {
        $(".detail-card").removeClass("hidden");
    }
}
setTimeout(doCountDown, 1000);

10-08 01:25