Что касается JS-анимации - то тут множество библиотек, самой популярной из которых является всем известный jQuery. Но интересно другое. В основе всех этих библиотек лежит один и тот же код, основанный на
requstAnimationFrame. Он приблизительно таков:
function animate(el, property, startVal, endVal, time, easing) {
var start = Data.now();
function reanimate(now) {
var l = easing(time / (now - start));
l = l > 1 ? 1 : l;
el[property] = startVal + (endVal - startVal) * l;
if(l < 1) requestAnimationFrame(reanimate);
}
requestAnimationFrame(reanimate);