jQuery / JavaScript: Моя рекурсивная функция setTimeout ускоряется, когда вкладка становится неактивной

У меня возникает небольшая странная дилемма в этом плагине слайд-шоу jQuery, который я создаю.

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

Вот мой (упрощенный) код:

var timer;
var counter;
var slides; // collection of all targeted slides.

// animate to the next slide
function nextSlide() {

    // stop timer
    methods.stopTimer();

    // increase counter
    counter++;
    if ( counter > slides.length-1 ) { counter = 0; } // if counter is greater than the amount of slides, back to the start.

    // inner = container to be animated
    // in the complete callback restart the timer.
    inner.animate({
        'left': '-'+slides.eq( counter ).position().left
    }, {
        duration : settings.animationSpeed,
        easing  : 'easeInOutExpo',
        complete : startTimer()
    });


}
// timer functions.
function startTimer() {
    if ( timer === '' ) {
        timer = setTimeout( function() {
            nextSlide();
        } , 3000 );
    }
}
function stopTimer() {
    clearTimeout( timer );
    timer = '';
}

Итак, что должно произойти, так это то, что в конце анимации таймер будет повторно присоединен с другим вызовом setTimeout , чтобы он стал непрерывным слайд-шоу (и это работает нормально, пока вы не покинете вкладку.

Как только вы покинете вкладку и вернетесь на вкладку со слайд-шоу кажется, что таймер 3000 мс был сокращен для мгновенного вызова, и теперь, когда заканчивается анимация, следующая начинается без задержки вообще.

Любые идеи о том, почему это происходит, и как это можно сделать.

Спасибо за чтение,

Яннис

5
задан Jannis 8 July 2011 в 01:24
поделиться