user381800
user381800

Reputation:

Help with JS setInterval, it goes crazy sometimes!

Hey guys. I have having a bit of trouble with this script I wrote regarding setInterval. It sometimes just goes crazy and starts firing repeatly even before the interval time has hit.

Basically I have this slider and I want it to slide automatically at intervals and this is the script I have but like I said it goes crazy have a little bit. What am I doing wrong?

var current = 1;
function autoAdvance()
{
    if(current === -1) { return false; }

    jQuery('#slide_menu ul li a').eq(current%jQuery('#slide_menu ul li a').length).trigger('click',[true]); 
    current++;
}
var itvl = setInterval(function(){autoAdvance();},8000);

Upvotes: 0

Views: 1036

Answers (1)

jordancpaul
jordancpaul

Reputation: 2964

setInterval (as with setTimeout) adds the callback function onto the event queue when the timeout expires - if there is other event handling happening at the same time, this can lead to multiple queued callbacks. I prefer to use setTimeout and have the callback function schedule another timeout. This way you will only schedule the next call once the previous one has completed.

function callback(){
    setTimeout(callback,8000);
}
setTimeout(callback,8000);

Oh, also, there is no need to wrap autoAdvance in a function in your setInterval.

setTimeout(autoAdvance,8000);

Upvotes: 3

Related Questions