返回顶部
首页 > 资讯 > 前端开发 > JavaScript >利用IntersectionObserver实现动态渲染的示例详解
  • 204
分享到

利用IntersectionObserver实现动态渲染的示例详解

IntersectionObserver动态渲染IntersectionObserver渲染 2022-12-28 18:12:30 204人浏览 薄情痞子
摘要

目录前言实现懒加载组件长列表组件示意测试前言 开发表格时,希望支持可视后的动态加载。在查找资料做了一些尝试后,最终使用IntersectionObserver,相对方便地实现了该功能

前言

开发表格时,希望支持可视后的动态加载。在查找资料做了一些尝试后,最终使用IntersectionObserver,相对方便地实现了该功能

IntersectionObserver诞生已经有几年了,所以它的兼容性目前已经达到可以使用的程度了。具体兼容程度以及详细api可参考CDN

实现

懒加载组件

核心就是利用了IntersectionObserver的能力,封装了LazyContainer组件,该组件的children,只有在视口中可见时,才会真正渲染

export const LazyContainer = (props) => {
  const { children } = props;
  const $ref = useRef<htmlDivElement>(null);
  const [isReady, setReady] = useState(false);
  useEffect(() => {
    const observer = new IntersectionObserver((entries) => {
      // 一个observer可以监听多个元素,本例中只有一个
      entries.forEach((entry) => {
        // isIntersecting:目标元素与观察者元素(一般为视口)是否相交
        if (!isReady && entry.isIntersecting) {
          setReady(true);
          // 首次加载完后,便停止监听
          observer.disconnect();
        }
      });
    });
    observer.observe($ref.current as Element);
  }, []);
  return <div ref={$ref}>{isReady ? children : null}</div>;
};

长列表组件示意

简洁实现一个长列表,测试LazyContainer组件

export const LongList = (props) => {
  const { loop = 1, children } = props;
  return (
    <ul>
      {Array.from({ length: loop }).map((x, i) => {
        return (
          <li style={{ height: '200px', marginBottom: '20px' }}>
            {React.cloneElement(children, { key: i, num: i })}
          </li>
        );
      })}
    </ul>
  );
};

测试

在页面上测试一下该功能

<LongList loop={3}>
  <LazyContainer num={1}>
    {}
    <img src="图片地址"></img>
  </LazyContainer>
</LongList>

在chrome network中开启slow 3G,然后让LongList中的元素一个接一个出现,就可以明显看到图片是一个接一个进行加载的。

到此这篇关于利用IntersectionObserver实现动态渲染的示例详解的文章就介绍到这了,更多相关IntersectionObserver动态渲染内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用IntersectionObserver实现动态渲染的示例详解

本文链接: https://lsjlt.com/news/176114.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作