1

以下是我用来定期运行函数的函数。我使用该功能来改变身体的背景。但由于某种原因它没有被解雇。请帮我处理这段代码。

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

谢谢你。

4

4 回答 4

5

从 setInterval 函数参数中删除括号。现在,这将调用函数并将函数的返回值设置为对 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.
于 2013-07-05T05:44:40.783 回答
4

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

setInterval(uiImageChanger,1);
于 2013-07-05T05:45:08.797 回答
1

有多种方法可以使用 setInterval 定义要执行的函数。其中一种方法是使用#mohkhan 给出的示例函数引用。但是,您也可以执行以下操作

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

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

于 2013-07-05T05:53:08.867 回答
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) + ')'
    );
}
于 2013-07-05T06:04:07.137 回答