首页 > 其他分享 >Intersection Observer API 交叉观察器 API vue3 antd table 滚动加载 使用过程

Intersection Observer API 交叉观察器 API vue3 antd table 滚动加载 使用过程

时间:2023-06-03 11:33:25浏览次数:53  
标签:观察器 load const Observer value API props root

需求:表格滚动加载

做法:
步骤一:给表格最后一行添加特定标识,类名或者id等

组件库 https://www.antdv.com/components/table-cn#API
webApi https://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API
组件名 table
添加类名的组件方法 rowClassName
使用例子:

:rowClassName="(record):any => (if(datasource.length===record.index:'begin_load_anchor':''))"

步骤二:使用web api

//观察器对象
//包含 被观察对象的父容器 root  容器外边距 rootMargin 以及被观察者出现在观察者显示的大小 threshold


let options = {
  root: document.querySelector('#scrollArea'),
  rootMargin: '0px',
  threshold: 1.0
}
//观察者实例
let observer = new IntersectionObserver(callback, options);
// 节流
export function debounce<Func extends (...args: any[]) => any>(
  func: Func,
  wait: number,
  immediate = false
): (...args: Parameters<Func>) => void {
  let timeout: any | ReturnType<typeof setTimeout>;

  return function executedFunction(this: any, ...args: Parameters<Func>) {
    const later = () => {
      timeout = null;
      if (!immediate) func.apply(this, args);
    };

    const callNow = immediate && !timeout;
    clearTimeout(timeout);
    timeout = setTimeout(later, wait);

    if (callNow) func.apply(this, args);
  };
}
//做一个节流
 const debouncedShowItem = debounce(beginLoadAnchor, 100);
let target = document.querySelector('#listItem');
observer.observe(target);
export async function useLazyLoading(props: ComputedRef<BasicTableProps>, destroy?: boolean) {
  const ele = props?.value?.columnsKey
    ? `.begin_load_anchor_${props.value.columnsKey}`
    : '.begin_load_anchor';
  const beginLoad: any = document.querySelector(ele);
  const body = props?.value?.columnsKey
    ? `.ant-table-body_${props.value.columnsKey}`
    : '.ant-table-body';
  const root: any = document.querySelector(body);
  const begin_load_anchor = {
    root,
    rootMargin: '0px',
    threshold: 0.2,
  };

  function beginLoadAnchor(entries) {
    if (isFunction(props?.value?.loadAnchor) && entries[0].isIntersecting) {
      props?.value?.loadAnchor();
    }
  }
  const debouncedShowItem = debounce(beginLoadAnchor, 100);

  const observer_load = new IntersectionObserver(debouncedShowItem, begin_load_anchor);
  const callback = () => {
    isShowBackTop.value = root.scrollTop > 300;
  };

  if (root instanceof Element) {
    root.addEventListener('scroll', callback, true);
  }

  if (beginLoad instanceof Element) {
    observer_load.observe(beginLoad);
  }

  if (root instanceof Element && beginLoad instanceof Element && destroy) {
    isShowBackTop.value = false;
    observer_load.disconnect();
    root.removeEventListener('scroll', debouncedShowItem);
  }
}

标签:观察器,load,const,Observer,value,API,props,root
From: https://www.cnblogs.com/zhengzhijian/p/17453714.html

相关文章

  • Flink核心API之Table API和SQL
    TableAPI&SQL注意:TableAPI和SQL现在还处于活跃开发阶段,还没有完全实现Flink中所有的特性。不是所有的[TableAPI,SQL]和[流,批]的组合都是支持的。TableAPI和SQL的由来:Flink针对标准的流处理和批处理提供了两种关系型API,TableAPI和SQL。TableAPI允许用户以一种很直......
  • Flink核心API之DataStream
    Flink中提供了4种不同层次的API,每种API在简洁和易表达之间有自己的权衡,适用于不同的场景。目前上面3个会用得比较多。低级API(StatefulStreamProcessing):提供了对时间和状态的细粒度控制,简洁性和易用性较差,主要应用在一些复杂事件处理逻辑上。核心API(DataStream/DataSetAP......
  • react配置API请求代理
    需求当请求http://10.1.1.1:3131/v1/*接口时,需要代理到8181端口。如果只需要代理匹配到/v1路径的请求,可以在package.json中使用http-proxy-middleware进行自定义代理配置。以下是一个示例:首先,确保已经安装了http-proxy-middleware包。如果没有安装,可以使用以下命令进行安......
  • CentOS 7.x安装微服务网关Apache APISIX
    阅读文本大概需要3分钟。    APISIX是一个云原生、高性能、可扩展的微服务API网关。它是基于OpenResty和etcd来实现,和传统API网关相比,APISIX具备动态路由和插件热加载,特别适合微服务体系下的API管理。APISIX通过插件机制,提供动态负载平衡、身份验证、限流限速等功能,并且......
  • .NET Core WebAPI 认证授权之JWT
    @@.NETCoreWebAPI认证授权之JWT--google from --->NETCoreWebAPI认证授权之JWT(二)  在上一篇 《.NET缓存系列(一):缓存入门》中实现了基本的缓存,接下来需要对缓存进行改进,解决一些存在的问题。一、缓存过期策略问 题:当源数据更改或删除时,服务器程序并不知道,导......
  • NET Core WebAPI 认证授权之JWT
    @@.netcoretoken非对称加密 --Google-->@@wepapi认证授权之jwt NETCoreWebAPI认证授权之JWT(二):HMAC算法实操  一、前言在上一篇 《.NETCoreWebAPI认证授权之JWT(一):JWT介绍》中讲到了JWT的组成,分为三部分,其中标头(header)和载荷(payload)都只是简单的将json......
  • 利用jira及confluence的API进行批量操作(查找/更新/导出/备份/删除等)
    前言:近期因为某些原因需要批量替换掉jira和confluence中的特定关键字,而且在替换前还希望进行备份(以便后续恢复)和导出(方便查看)atlassian官方的api介绍文档太简陋,很多传参都没有进一步的描述说明,过程中踩了不少的坑...故现将相关代码分享下,希望有类似需求的朋友能用得上,直接上代......
  • Elasticsearch专题精讲—— REST APIs —— Document APIs —— Delete by query API
    RESTAPIs——DocumentAPIs——DeletebyqueryAPIhttps://www.elastic.co/guide/en/elasticsearch/reference/8.8/docs-delete-by-query.htmlDeletesdocumentsthatmatchthespecifiedquery.删除与指定查询匹配的文档。curl-XPOS......
  • Elasticsearch专题精讲—— REST APIs —— Document APIs —— Delete API
    RESTAPIs——DocumentAPIs——DeleteAPIRemovesaJSONdocumentfromthespecifiedindex.从指定的索引中移除JSON文档。1、Request(请求)https://www.elastic.co/guide/en/elasticsearch/reference/8.8/docs-delete.......
  • 【电商api接口淘宝系列分享】获得商品评论+获得淘宝店铺详情演示示例
    商品评论是电商平台中一个非常重要的功能,对于商家和消费者都具有重要的意义。以下是商品评论的重要性:帮助其他消费者做出购买决策:消费者在购物前往往会查看其他消费者对商品的评价,通过评论得知商品的好、坏之处,从而做出更准确的购买决策。提供商家改进产品的意见和建议:通过......