requestAnimationFrame 简单理解

requestAnimationFrame 是什么

window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画,并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数,该回调函数会在浏览器下一次重绘之前执行 顾名思义,请求动画帧,也称 帧循环。 其实就是该API能以浏览器的显示频率来作为其动画动作的频率,比如浏览器每16.7ms刷新一次,动画回调也每16.7ms调用一次,这样就不会存在过度绘制的问题,动画不会掉帧,自然流畅。

requestAnimationFrame 可以用在长列表优化(请求动画帧、减少重排的次数)

const renderList = async () => {
  console.time("列表时间");
  const list = await getList();
  const total = list.length;
  const page = 0;
  const limit = 20;
  const totalPage = Math.ceil(total / limit);
  const render = (page) => {
    if (page >= totalPage) return;
    window.requestAnimationFrame(() => {
      for (let i = page * limit; i <= page * limit + limit; i++) {
        const item = list[i];
        const div = document.createElement("div");
        div.className = "flex";
        div.innerHTML = `<img src="${item.imgUrl}"/><span>${item.title}</span>`;
        container.appendChild(div);
      }
      render(page + 1);
    });
  };
  render(page);
  console.timeEnd("列表时间");
};
renderList();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容