У меня возникает небольшая странная дилемма в этом плагине слайд-шоу 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 мс
был сокращен для мгновенного вызова, и теперь, когда заканчивается анимация, следующая начинается без задержки вообще.
Любые идеи о том, почему это происходит, и как это можно сделать.
Спасибо за чтение,
Яннис