Рома: если бы вы ставили transition только на нужные элементы, у вас бы ничего не скакало. Я просто удалил правило раздающее всем элементам transition и все дёрганья исчезли
Игорь Воронов: ну парень же наверное хотел шаблон для своей задачи - ajax + history API. Типа добавил на страницу скрипт, указал target и все, все работает из коробки. Handlebars это просто template engine
Кстати, вы внутри цикла объявляете position с помощью var. В JS область видимости создает не блок ({ }), а функция. Таким образом вы объявляете переменную position в той же области видимости, что и blocks. Ну, на всякий случай.
Метод offset существует у объектов jQuery. Выбирая из blocks (который объект jQuery) нужный элемент с помощью индекса, вы получаете просто элемент DOM, в котором такого метода нет.
Ну в таком случае мне кажется стоит просто иметь два экземпляра объекта - старый и новый.
function doSomethingAwesomeWith(obj) {
return obj; // обработать obj и вернуть результирующий объект
}
obj = obj; // старый объект
result_obj = doSomethingAwesomeWith(obj); // новый объект
Таким образом в obj у вас лежит ссылка на исходный объект, а в result_obj - на новый.