创建一个时间间隔,该时间间隔将导致函数在JavaScript中随机运行

时间:2013-06-20 18:08:46

标签: javascript jquery random timer

我正在尝试随机加载随机图像。出于某种原因,这不是随机化的时间,尽管它确实随机化了图像。任何想法有什么不对?

    var randomTime2 = 3000; //initialize the random time with this value to start

setInterval(function(){
    var randomNum = Math.floor((Math.random()*3)+1);//random num for image

    $('.recent-project2 img').fadeTo('slow',0,function(){
            var randomImg = "img/recent-projects-"+randomNum+".jpg";

            $('.recent-project2 img').attr('src',randomImg);
            $('.recent-project2 img').fadeTo('slow',1);

        });
    randomTime2 = Math.floor(Math.random()*10000);//reset random time
    return randomTime2; //return random time
    },randomTime2);

3 个答案:

答案 0 :(得分:4)

使用setTimeout并在函数末尾以随机时间重新触发。

答案 1 :(得分:2)

setInterval调用只会将您的函数和所需的时间间隔添加到内部表中,以便在预期的延迟时间过去时记住调用代码。但请注意,即使您更改用于指定时间间隔的变量,这也不会影响内部表:当您调用setInterval并且现在存储它时,已读取该值。

要随机化回调时间,请为您的函数命名,然后使用setTimeout代替setInterval

function MyCallback() {
    ...
    setTimeout(myCallback, new_delay);
}

setTimeout(myCallback, first_delay);

在每次通话时使用此方法,您可以在下次通话前决定不同的延迟。

答案 2 :(得分:1)

你不能在函数内部更改randomTime2的值,因为它是通过值而不是引用。

setInterval(someFunction, someNumberValue)

这行代码将每 someNumberValue-miliseconds 调用 someFunction 。该值不会动态更新。

有很多方法可以使这项工作,但我建议只使用setTimeout并使someFunction的结束再次调用它。例如:

//psudo-code, might not actually run, just showing you the general idea.
var someFunction = function(){
    console.log("Whatever.");
}

var repeatFunction = function(){
    someFunction()
    var timeoutID = window.setTimeout(repeatFunction, Math.random()*10000);
}

repeatFunction(); //Starts the loop.