javascript - 性能动画Frame和onScroll哪个更好?

标签 javascript reactjs requestanimationframe

我有一个用 React 创建的选框元素。我希望当元素不可见时选取框停止。

这是我用于检查可见性的代码:

const isVisible = () => {
  const rect = marqueeRef.current.getBoundingClientRect();
  const elTop = rect.top;
  const elBottom = rect.bottom;
  const visible = elTop < wHeight && elBottom >= 0;
  return visible;
};

我想知道什么对性能更好:

a.让动画帧运行并每次检查该元素是否可见。

const animate = () => {
  if (isVisible()) {
    i = i < width ? i + step : 0;
    marqueeRef.current.style.transform = `translateX(${-i}px)`;
  }
  aF = requestAnimationFrame(animate);
};

b.创建一个 onScroll 处理程序来检查元素是否可见,然后启动和停止动画帧。

const onScroll = () => {
  if(isVisible()){
    animate();
  }else{
    cancelAnimationFrame(aF);
  }
}

两种方式都会不断检查元素是否可见,所以我想知道是否有人有这方面的经验,并且可以阐明哪种方式的性能会更好。

谢谢。

最佳答案

Intersection observer API非常适合这个。它比这两个选项具有更好的性能,因为它仅在元素变得可见或不可见(取决于给定阈值)时调用回调,并且具有相对简单的 API 来启动。

关于javascript - 性能动画Frame和onScroll哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59535092/

相关文章:

javascript - 有没有办法使 <li> 下拉菜单功能像 <option> 选择菜单一样?

javascript - 从组件类中访问状态

javascript - 如何处理 requestAnimationFrame 函数的错误

javascript - 存储 requestAnimationFrame

javascript - React 使用 requestAnimationFrame 吗?如果有的话,它是如何使用的呢?

javascript - 使用 jQuery 的 Deferred 管理同步和异步 JavaScript 函数

javascript - 如何将多维数组转换为对象中的数组

javascript - 嵌入式 YouTube API 的递归自定义缩略图不会重播

javascript - 在 API 更新/状态更新之前响应组件渲染

javascript - ReactJS 与传单 : tiles not correctly displayed until page refresh