Я плохо знаком с проблемой таймеров, анимацией пока не приходилось заниматься. Но всё же выскажу предположение. Насколько я знаю обработчики событий находятся в специальной очереди, общей для всех событий. Так как javascript язык однопоточный то и события обрабатываются строго по очереди. Если предположить что на закрытой вкладке обработчики только накапливаются а на открытой и накапливаются и исполняются, то при переходе от закрытой вкладки к открытой ты получишь исполнение всех накопленных обработчиков практически сразу,точнее без временных промежутков. Это будет выглядеть как ускоренная анимация. Либо если твои обработчики сами запускают jquery анимацию, ты получешь несколько анимаций сразу.
Как решение в голову приходят два варианта,
1й - задавать вызов следующего обработчик события, непосредственно в самом обработчике. В этом случае гарантированно небудут накапливаться обработчики. Если я правильно понимаю, делать это надо через setTimeout, ибо вызывается он однократно.
setTimeout(function(){
/* полезный код... */
setTimeout(arguments.callee, 20);//задаём следующий вызов обработчика в самом обработчике
}, 20);
2й) В обработчике проверять время между вызовами обработчика(последним и текущим) и если оно меньше положенного, не исполняем полезный код.