Таймеры возвращаются назад, когда вкладка не имеет фокуса (и многих других странных игр, таких как ускорение, когда фокус возвращается), поэтому ваши setInterval
и setTimeout
могут быть не синхронизированы.
Вместо этого просто используйте setTimeout
, где каждое действие (постепенное исчезновение и постепенное появление) вызывает следующее:
function catSlider() {
$(catDisplay).html(cats[curCat]);
$(catDisplay).fadeIn();
function fadeOut() {
$(catDisplay).fadeOut();
setTimeout(fadeIn, 400);
}
function fadeIn() {
if (++curCat >= cats.length) {
curCat = 0;
}
$(catDisplay).html(cats[curCat]);
$(catDisplay).fadeIn();
setTimeout(fadeOut, 3000);
}
setTimeout(fadeOut, 3000);
}
И / или вы можете рассмотреть обратные вызовы, которые fadeOut
и fadeIn
может сработать, в частности на fadeOut
:
function catSlider() {
$(catDisplay).html(cats[curCat]);
$(catDisplay).fadeIn();
function fadeOut() {
$(catDisplay).fadeOut(fadeIn); // ***
}
function fadeIn() {
if (++curCat >= cats.length) {
curCat = 0;
}
$(catDisplay).html(cats[curCat]);
$(catDisplay).fadeIn();
setTimeout(fadeOut, 3000);
}
setTimeout(fadeOut, 3000);
}
Примечание: если хотите, вы можете заменить
if (++curCat >= cats.length) {
curCat = 0;
}
на
curCat = (curCat + 1) % cats.length;