【问题标题】:Return the value of a variable返回变量的值
【发布时间】:2014-08-31 04:16:49
【问题描述】:

代码:

var n = 360; // 6 min of waiting after blocked
function countDown() {
    n--;
    if (n > 0) {
        setTimeout(countDown, 1000);
    }
    $("span#waitcount").html(document.createTextNode(n));
}

var count = 50; // Count of tokens when reached 0 block the page
var counter = document.getElementById('counter');

var clickDisabled = false;
$('.slotMachineButton').click(function() {
    if (clickDisabled)
        return;
    setTimeout(function() {
        count--;
        counter.innerHTML = count;
        if (count === 0) {

            $.blockUI({message: '<h1>Thank you for Playing!!!<br>Please wait for 6 munites to be able to play again.</h1>'});
            setTimeout(function() {
                $.unblockUI({
                    onUnblock: function() {
                        alert('Game has been resumed!!!');
                    }
                });
            }, 10000);
            setTimeout(countDown, 1000);
        }
    });
    clickDisabled = true;
    setTimeout(function() {
        clickDisabled = false;
    }, 3000);
}

目标:

  • 当令牌计数达到 0 时,将其恢复为原始值以重新开始另一个计数,因为只要计数达到 0,它就会变为 -1 并继续计数。

  • 当 6 分钟等待结束后开始另一个等待,我不知道我是否获得了适合这部分的代码,但请检查一下。

【问题讨论】:

  • 好吧,你少了一个括号。此外,如果您想每 1000 毫秒重复一次函数调用,则应使用 setInterval,而不是递归调用 setTimeout。此外,您没有指定在代码中的何处重置 count 和 n 的值。最后,如果您唯一的问题是“请检查”,它不属于 StackOverflow。
  • 与其减少计数器,不如保存计时器开始时的时间戳(通过Date.now()),然后从当前时间中减去该时间,然后查看是否超过 360 秒已经通过。 Timers in JS 不准确,您可以保证您的回调将在 最少 段时间后触发;计时器触发回调可能需要更长的时间。
  • count--n-- 喊在函数末尾,必须重置。

标签: javascript jquery variables return countdown


【解决方案1】:

如果你想保留你的代码并且你不遵循 cmets 中的建议,那么就这样做:

        var n = 360, // 6 min of waiting after blocked
            count = 50, // Count of tokens when reached 0 block the page
            counter = document.getElementById('counter'),            
            clickDisabled = false;

        function countDown(){
            if(n > 0){
                setTimeout(countDown, 1000);
            } else {
                n = 360;
                clickDisabled = false
            }
            $("span#waitcount").html(document.createTextNode(n));
            n--;
        }

        $('.slotMachineButton').click(function () {
            if (clickDisabled) {
                return;
            }
            setTimeout(function () {
                counter.innerHTML = count;
                if (count === 0) {
                    $.blockUI({ message: '<h1>Thank you for Playing!!!<br>Please wait or 6 munites to be able to play again.</h1>' });
                    setTimeout(function () {
                        $.unblockUI({
                            onUnblock: function () {
                                clickDisabled = true;
                                alert('Game has been resumed!!!');                                    
                                setTimeout(countDown, 10);
                            }
                        });
                    }, 1000);
                    count = 50;
                }
                count--;
            });
            clickDisabled = true;
            setTimeout(function () {
                clickDisabled = false;
            }, 100);
        });

你真的应该寻找不同的方法。我更改了用于测试的计时器值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 2015-11-09
    相关资源
    最近更新 更多