use requestAnimationFrame instead of setInterval