Помогите с JS setInterval, иногда он сходит с ума! - PullRequest
1 голос
/ 15 марта 2011

Привет, ребята. У меня возникли небольшие проблемы с этим сценарием, который я написал относительно setInterval. Иногда он просто сходит с ума и начинает повторять стрельбу еще до наступления интервала времени.

По сути, у меня есть этот слайдер, и я хочу, чтобы он скользил автоматически через определенные промежутки времени, и у меня есть такой сценарий, но, как я уже сказал, он немного сходит с ума. Что я делаю не так?

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

1 Ответ

3 голосов
/ 15 марта 2011

setInterval (как и setTimeout) добавляет функцию обратного вызова в очередь событий по истечении времени ожидания - если одновременно происходит другая обработка событий, это может привести к множественным обратным вызовам в очереди. Я предпочитаю использовать setTimeout и планирую функцию обратного вызова в другое время ожидания. Таким образом, вы запланируете следующий звонок только после завершения предыдущего.

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

Да, также нет необходимости заключать autoAdvance в функцию в вашем setInterval.

setTimeout(autoAdvance,8000);
...