3

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

    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);
4

3 回答 3

4

在函数结束时随机使用setTimeout并重新触发。

于 2013-06-20T18:11:52.780 回答
2

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

要随机化回调时间,请给您的函数一个名称,然后使用setTimeout而不是setInterval

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

setTimeout(myCallback, first_delay);

在每次通话中使用这种方法,您可以在下次通话之前决定不同的延迟。

于 2013-06-20T18:15:38.730 回答
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.
于 2013-06-20T18:17:51.253 回答