раньше при переходе на другую вкладку setInterval продолжал работать,  при возвращении на вкладку срабатывали все накопившееся события. Выглядило это как ускорившаяся анимация. 
Я не вкурсе просто, сейчас что-то изменилось ?
Можно ещё RequestAnimationFrame использовать, а в случае его отсутствия делать через setTimeout
но пример и без того перегружен по моему.
Я сам непонял нафиг я эту анимацию писать начал, просто чото написать хотелось наверно ))))
В баню всё, я спать 
// кроссбраузерны requestAnimationFrame с поддержкой старого говна
(function() {
    var lastTime = 0;
    var vendors = ['ms', 'moz', 'webkit', 'o'];
    //если  requestAnimationFrame отсутствует то поищим requestAnimationFrame с префиксами.
    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
        window.cancelAnimationFrame = 
          window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
    }
    //если  requestAnimationFrame отсутствует то с имитируем его при помощи timeout
    if (!window.requestAnimationFrame)
        window.requestAnimationFrame = function(callback, element) {
            var currTime = new Date().getTime();
            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
              timeToCall);
            lastTime = currTime + timeToCall;
            return id;
        };
    // если cancelAnimationFrame отсутствует то будем отменять setTimeout
    if (!window.cancelAnimationFrame)
        window.cancelAnimationFrame = function(id) {
            clearTimeout(id);
        };
}());