setTimeout(), setInterval(), and requestAnimationFrame()
Why is requestAnimationFrame ideal for this scroll animation?
function smoothScroll(element, duration) {
const start = element.scrollTop;
const change = target - start;
const startTime = performance.now();
requestAnimationFrame(function animate(currentTime) {
const elapsed = currentTime - startTime;
const progress = Math.min(elapsed / duration, 1);
element.scrollTop = start + change * easeInOutCubic(progress);
if (progress < 1) requestAnimationFrame(animate);
});
}