我正在尝试随机加载随机图像。出于某种原因,这不是随机化的时间,尽管它确实随机化了图像。任何想法有什么不对?
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);
答案 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.