什么是性能animationFrame或onScroll更好的选择?

时间:2019-12-30 18:13:13

标签: 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);
  }
}

这两种方法都会不断检查该元素是否可见,所以我想知道是否有人对此有任何经验,并可能会从中发现更好的性能。

谢谢。

1 个答案:

答案 0 :(得分:1)

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