随机间隔的JavaScript超时事件

时间:2014-07-16 09:20:44

标签: javascript

我正在开发一个Web应用程序(JSF / Primefaces),其中显示了许多面板,这些面板最初被一个'加载'但是我试图写一些JavaScript来设置每个面板在1-15秒之后随机解锁,但不一定全部在同一时间彼此解锁(即面板1可能在8秒后解锁,面板2可能会在之后解锁4秒等)。

我已经编写了以下代码来执行此操作:

function hideBlockUI() {

    var buiIndex = 0;
    while(true) {
        var buiComponent = PF('bui_' + buiIndex); 

        if (buiComponent != null) {
            (function(buiIndex) { 
                setTimeout(function() {hideBUI('bui_' + buiIndex);}, Math.floor((Math.random() * 15) + 1));
            })(buiIndex);
        } else {
            break;
        }

        buiIndex++;
    }

    PF('poll').stop();
}

function hideBUI(name) {
    PF(name).hide();
}

我看到的行为是所有面板在每次运行中完全同时解锁,而不是以不同的随机间隔。我已经验证了传入hideBUI()的名称是正确的,并且生成的随机超时不同,但行为仍然存在。我做错了什么?

编辑:只是要注意隐藏的组件名为bui_0,bui_1 ... bui_n,具体取决于有多少个面板,直到运行时才知道。

1 个答案:

答案 0 :(得分:1)

您的问题是您正在设置时间

Math.floor((Math.random() * 15) + 1)

生成1到15之间的值。因此,浏览器等待的最长时间为15 毫秒。请参阅setTimeout documentation

使用

修复它
 Math.floor((Math.random() * 15) + 1)*1000 // between 1 and 15 seconds