使用 requestAnimationFrame 代替 setTimeout