Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重新开始循环?_Javascript_Jquery - Fatal编程技术网

Javascript 如何重新开始循环?

Javascript 如何重新开始循环?,javascript,jquery,Javascript,Jquery,我有一个JSON文件,它存储了一组图片URL。我想通过这些链接旋转,每4秒更改div的背景 访问JSON文件或更改div的背景都没有问题。但是,我似乎不知道如何在每个图片显示后在数组的开头重新启动 我应该如何处理这个问题 $.getJSON(json, function (data) { var arr = $.map(data, function (el) { return el; }) , i = 0; var changeObj = function() {

我有一个JSON文件,它存储了一组图片URL。我想通过这些链接旋转,每4秒更改
div
的背景

访问JSON文件或更改div的背景都没有问题。但是,我似乎不知道如何在每个图片显示后在数组的开头重新启动

我应该如何处理这个问题

$.getJSON(json, function (data) {
    var arr = $.map(data, function (el) { return el; })
      , i = 0;

    var changeObj = function() {
        i++;
        var url = 'url("' + arr[i].url + '")';
        $this.css({
            backgroundImage: url
        });
    };

    setInterval(changeObj, 4000);           
});

这里有一个

使用模运算,使其在到达数组末尾时环绕。替换:

i++;
与:

这基本上相当于:

i++;
if (i == arr.length) {
    i = 0;
}
顺便说一句,您可以简化
setInterval
调用:

setInterval(changeObj, 4000);

假设您已经将
JSON
解析为一个名为
myPictureArray
的URL数组,并编写了一个名为
swapInNewPicture
的函数,该函数将图像的URL作为其参数。(我不会为您编写这些函数。)

现在,在解析完
JSON
之后,只需调用
rotatePictures(myPictureArray)

setInterval(changeObj, 4000);
var rotatePictures = function (arr) {
    var length = arr.length
      , i = 0;
    setInterval(function () {
        i = (i + 1) % length;
        swapInNewPicture(arr[i]);
    }, 4000)
}