setInterval ущербен в анимациях. Вот нормальный пример
http://jsfiddle.net/rs24jv0k/
Только позиция должна не каждый раз по пикселю меняться, а вычисляться исходя из пройденного времени с момента начала анимации, и по завершению анимации перестать запрашивать новый кадр.