以下是我用来定期运行函数的函数。我用这个函数来改变身体的背景。但由于某种原因它不会被解雇。请帮我这个代码。
setInterval(uiImageChanger(),1);
function uiImageChanger(){
var currentTime = new Date().getHours();
var images = ['image1.jpg','image2.jpg'];
if( currentTime > 00 && currentTime <= 12){
$('body').css('background-image', "url(" + randomImagePicker(images ,'breakfast') + ")");
}else if( currentTime > 12 && currentTime <= 16){
$('body').css('background-image', "url(" + randomImagePicker(images ,'lunch') + ")");
}else if( currentTime > 16 && currentTime <= 00){
$('body').css('background-image', "url(" + randomImagePicker(images ,'dinner') + ")");
}
}
function randomImagePicker(imgArray,time){
if(time == 'breakfast'){
return "../images/main_image/breakfast/" + imgArray[Math.floor(Math.random() * imgArray.length)];
}else if(time == 'lunch'){
return "../images/main_image/lunch/" + imgArray[Math.floor(Math.random() * imgArray.length)];
}else if(time == 'dinner'){
return "../images/main_image/dinner/" + imgArray[Math.floor(Math.random() * imgArray.length)];
}
}
谢谢。
答案 0 :(得分:5)
从setInterval函数参数中删除parens。现在,这将调用该函数并将函数的返回值设置为setInterval的引用,此处为undefined
,因为您不返回任何内容。所以基本上你没有设置间隔,所以除了在设置setInterval时第一次执行时没有任何反应。
更改
setInterval(uiImageChanger(),1); // This will invoke the function immediately.
到
setInterval(uiImageChanger,1); // You want to set the reference of the function to setInterval.
答案 1 :(得分:4)
您必须将指针传递给函数而不执行该函数。
setInterval(uiImageChanger,1);
答案 2 :(得分:1)
有多种方法可以使用setInterval定义要执行的函数。 其中一种方法是使用函数引用,其示例由#mohkhan给出。 但是,您也可以执行以下操作
setInterval(function(){
// code comes here.
}, time_in_mills);
另外我看到你已经提到函数执行的值为1.这意味着每1毫秒执行一次函数,这根本不是一个好习惯。以毫秒为单位给出一个实际的时间,以便您有足够的时间执行代码。
答案 3 :(得分:1)
您已经获得了有关setInterval()
问题的几个答案。我想在代码中指出其他几个问题。
首先,此测试将始终失败:
else if( currentTime > 16 && currentTime <= 00)
毕竟,如果一个数字是> 16它也不能是&lt; = 0。
此外,您可能会收到警告:00
是一个不推荐使用的八进制常量。当然,八进制零与十进制零的值相同,但要注意无意的八进制常量:避免使用前导零。
代码中有很多重复。您可以轻松删除所有这些重复,以使代码更易于维护。考虑这种方法:
// Return a random integer >= 0 and < n
function randomInt( n ) {
return Math.floor( Math.random() * n );
}
// Return a random element from an array
function randomElement( array ) {
return array[ randomInt(array.length) ];
}
function uiImageChanger(){
var hour = new Date().getHours();
var meal =
hour <= 12 ? 'breakfast' :
hour <= 16 ? 'lunch' :
'dinner';
var images = [ 'image1.jpg', 'image2.jpg' ];
$('body').css(
'background-image',
'url(../images/main_image/' + meal +
'/' + randomElement(images) + ')'
);
}