setInterval没有'不要被解雇

setInterval doesn't get fired

本文关键字:没有 setInterval      更新时间:2023-09-26

下面是我用来定期运行函数的函数。我使用该函数来更改身体的背景。但它不会因为某种原因而被解雇。请帮我处理这个代码。

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)];
        }
    }

谢谢。

从setInterval函数参数中删除parens。现在,这将调用函数,并将函数的返回值设置为对setInterval的引用,这里是undefined,因为您不返回任何内容。所以基本上你什么都不设置interval,所以在设置setInterval时,除了第一次执行之外,什么都不会发生。

更改

setInterval(uiImageChanger(),1); // This will invoke the function immediately.

setInterval(uiImageChanger,1); // You want to set the reference of the function to setInterval.

您必须将指针传递给函数,而不是执行该函数。

setInterval(uiImageChanger,1);

有多种方法可以定义要使用setInterval执行的函数。其中一种方法是使用函数引用,示例由#mohkhan给出。然而,你也可以做以下

    setInterval(function(){
           // code comes here.
    }, time_in_mills);

我还看到您提到了函数执行的值为1。这意味着每1毫秒就会执行一次函数,这根本不是一个好的做法。以毫秒为单位给出一个实际的时间,这样您就有足够的时间执行代码。

您已经得到了关于setInterval()问题的几个答案。我想指出代码中的其他几个问题。

首先,这个测试总是会失败:

else if( currentTime > 16 && currentTime <= 00)

毕竟,如果一个数字>16,它也不能是<=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) + ')'
    );
}