Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery: infinite loop through array... each()?

Tags:

jquery

Fiddle here: http://jsfiddle.net/F6nJu/

I have a colored box:

<div id="colorblock"></div>
#colorblock { background:#3ff; width: 100%; height: 300px; }

I have an array of colors created in javascript:

var arr = [ "#f00", "#ff0", "#f0f", "#f66"];

I iterate through those colors with a jQuery each() function:

$.each(arr, function(key, value) {
  $('#colorblock').delay('1200').animate({backgroundColor:value}, 600);
});

When the array iterates to the end, how can I start the array iteration over (so the animation goes on forever)?

like image 685
superUntitled Avatar asked Dec 03 '22 08:12

superUntitled


1 Answers

var arr = ["#f00", "#ff0", "#f0f", "#f66"];

// run through the array forever
(function recurse(counter) {
    // get the colour
    var color = arr[counter];
    // animate it
    $('#colorblock').delay('1200').animate({
        backgroundColor: color
    }, 600);
    // delete the value to save memory
    delete arr[counter];
    // add the value at the end of the array
    arr.push(color);
    // run it again for the next number
    setTimeout(function() {
        recurse(counter + 1);
    }, 200);
// start it for the first number.
})(0);

Infinite recursion. Delete the current entry, then add the current value to the end.

Live Example

For those who are interested in what the array looks like:

["#foo", "#ff0", "#f0f", "#f66"] (counter = 0)
[undefined, "#ff0", "#f0f", "#f66", "#foo"] (counter = 1)
[undefined, undefined, "#f0f", "#f66", "#foo", "#ff0"] (counter = 2)
[undefined, undefined, undefined, "#f66", "#foo", "#ff0", "#f0f"] (counter = 3)
[undefined, undefined, undefined, undefined, "#foo", "#ff0", "#f0f", "#f66"] (counter = 4)
etc.
like image 200
Raynos Avatar answered Dec 25 '22 23:12

Raynos