setTimeout и анимация внутри более ранней функции - PullRequest
0 голосов
/ 09 августа 2011

Чтобы избавиться от накопления анимации, вызванного setTimeout (или setInterval либо) во время неактивности вкладки (окна) (потеря фокуса), мне пришлось использовать рекурсивный обратный вызов , например:

function auto() {
interval = setTimeout(function() {      
    $('#slider').animate({left: '-=500'}, 800, function(){
          auto();         // THE RECURSIVE CALLBACK
    });
}, 2000);
}
auto();

Теперь я бы хотел, чтобы НЕ повторно использовал #slider анимацию , потому что я уже определил ее в function animate() (без изменения * 1014). * потому что я должен использовать это в других местах как есть):

function animate(){
    $('#slider').animate({left: '-=500'}, 800);
}

Как заставить работать что-то вроде этого :

function auto() {
interval = setTimeout(function() {  

      animation();auto();  // THIS IS WRONG AS NOT a RECURSIVE CALLBACK - and creates animation buildup     

}, 2000);
}
auto();

Заранее большое спасибо!

1 Ответ

3 голосов
/ 09 августа 2011

Сделать animate принять обратный вызов:

function animate(cb){
    $('#slider').animate({left: '-=500'}, 800, cb);
}

//...

interval = setTimeout(function() {  
    animation(function(){
        auto();
    });   
}, 2000);
...