Вам нужно использовать функцию линейной интерполяции (да, у нас в веб-анимации есть немного математики).
А также перестать использовать setInterval за этим делом, используйте requestAnimationFrame.
Вот вам
статья, которая натолкнёт на правильные мысли, а ещё больше информации можно получить в Гугле по запросу "js lerp animation".