当前位置: 首页 > Web前端 > HTML

javascript实现列表无限加载

时间:2023-04-02 11:56:04 HTML

原因是之前用这种网站的时候经常看到无限加载的效果。今天正好看到getBoundingClientRect这个api,想试试看如何实现Infinitescroll的效果。原理是在列表底部埋一个需要无限加载的隐藏元素。当连续滑动时,隐藏的元素会出现在视口中,这意味着当前浏览的列表已经到达底部。这时候就需要列表加载。大概的HTML结构如下:

  • 我是一篇文章
  • 我是一篇文章
  • 我是一篇文章
  • 我是一篇文章
  • 我是一篇文章
  • 即:滑动列表=>视图中出现隐藏无限加载指示器=>开始加载那么重点就是检测视图窗口中是否出现隐藏无限加载指示器。幸运的是,我们有ApigetBoundingClientRect。getBoundingClientRect通过参考MDN,我们知道Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置。除了width和height之外的属性都是相对于视口左上角的位置。至于兼容性,是绿色的,可以放心使用。我可以使用getboundingclientrect吗?跨主流浏览器支持getboundingclientrect特性的数据来??自caniuse.com。元素,即与该元素相关的一组CSS边框。对象的属性如下图所示:top、left、bottom、right都是相对于view的左上角的。至于top和left属性,就很好理解了。至于bottom和right,一开始我有点迷糊。通过devtools观察后发现bottom是元素相对于视图窗口左上角的底部,right是元素相对于视图窗口左上角的最右侧。说。其中right-left是元素的宽度,bottom-top是元素的高度。检查元素是否出现在视图窗口中这里有两种情况,一种是元素是否出现在视图窗口中,另一种是元素是否完全出现在视图窗口中。两种情况的区别在于,一种是部分存在,另一种是完全存在。下面我把这两种情况写出来:部分出现在视图窗口functioncheckIsPartialVisible(element){constrect=element.getBoundingClientRect()const{top,left,bottom,right}=rectconstisPartialVisible=top>=0&&left>=0returnisPartialVisible}全部出现在视图窗口中:functioncheckIsTotalVisible(element){constrect=element.getBoundingClientRect()const{top,left,bottom,right}=rectconstisTotalVisible=(top>=0&&left>=0&&bottom