Layui表格怎么实现无限滚动加载(懒加载)

老宇同学_2057

老宇同学_2057

2026-03-26

540人浏览

原创

layui table实现懒加载需手动接管数据:首次render初始化空表,监听.layui-table-body滚动到底部后reload追加数据,通过done回调手动append tr并resize;单次加载限20–30条防卡顿,缓存pagekey避免重复请求。

layui table 如何开启 scrolly + 异步加载配合?

原生 layui.table 不支持无限滚动(infinite scroll),只支持固定高度下的滚动条(scrolly)和「下一页」式分页。想实现懒加载,必须绕过内置分页,手动接管数据拉取和表格渲染。

关键不是开某个开关,而是把 render 拆成两步:首次用 table.render() 初始化空表结构,后续靠 table.reload() 追加行并手动拼接 DOM —— 因为 data 选项不支持增量追加,只能全量重载或自己 append。

  • 不要设 page: true,否则会强制启用分页栏,干扰懒加载逻辑
  • height 必须设具体值(如 500),否则 scrollY 不生效,滚动事件无法触发
  • 监听的是容器的 scroll 事件,不是表格内部事件;要自己计算「是否接近底部」

如何监听滚动到底部并触发下一页请求?

layui 表格容器是 div.layui-table-box,但它的滚动条实际在子节点 div.layui-table-body 上。直接绑 scroll 到表格实例的 elem 上无效,必须精确到 body 容器。

常见错误是监听了 window 或整个表格外层,导致滚动距离计算失准,提前或延迟触发加载。

  • 用 table.on('init') 拿到表格实例后,通过 elem.find('.layui-table-body') 找到真实滚动容器
  • 判断是否到底部:用 scrollTop + clientHeight >= scrollHeight - 10(留 10px 容错)
  • 加防抖:每次触发前检查 loading 状态,避免快速滚动时重复请求
  • 请求成功后,更新本地页码(如 nextPage = currentPage + 1),并缓存已加载数据

reload 时怎么避免翻页闪动、重复渲染?

table.reload() 默认会清空当前表格再重绘,如果每次都传全量数据,滚动位置会跳回顶部,体验极差。真正可行的是「仅追加新数据」+「手动插入 tr」。

所以不要依赖 data 字段 reload,而要用 done 回调拿到原始数据,再用 jQuery 操作 tbody:

  • 首次渲染时设 data: [],保证结构初始化但无数据
  • 每次加载新数据后,在 done 回调里用 elem.next('.layui-table-box').find('tbody') 找到 tbody
  • 对每条新数据生成 <tr><td>...</td></tr> 并 append() 进去(注意字段顺序要和 cols 严格对应)
  • 追加后调用 table.resize() 同步列宽,否则可能出现错位

示例片段:

done: function(res, curr, count){<br>  var tbody = elem.next('.layui-table-box').find('tbody');<br>  res.data.forEach(function(item){<br>    var tr = '<tr>
<td>' + item.id + '</td>
<td>' + item.name + '</td>
</tr>';<br>    tbody.append(tr);<br>  });<br>  table.resize();<br>}

为什么用 layUI 的 scrollY 容易卡顿甚至假死?

因为 layUI 表格在渲染大量行(比如单次加载 100+ 条)时,会一次性生成全部 tr 节点并插入 DOM,浏览器重排压力大。这不是懒加载的问题,而是 layUI 自身 DOM 渲染策略的硬伤。

尤其在低配设备或 IE 下,滚动过程中频繁 reload + append 多个 tr,极易引发卡顿。没有银弹,只有收敛策略:

  • 单次加载条数控制在 20–30 条以内,宁可多请求几次,别贪多
  • 禁用 skin: 'row' 等视觉增强项,减少 CSS 计算量
  • 避免在 cols 中写复杂模板(如嵌套 lay-tpl),改用纯文本或简单 templet 函数
  • 如果数据量长期 > 5000 行,该换 virtual scroll 方案(比如用 vue-virtual-scroller 或原生 IntersectionObserver)

最常被忽略的一点:懒加载状态下,用户可能反复上下滚动,导致同一组数据被多次请求、多次插入。得用 Map 或 Set 缓存已加载的 pageKey,而不是只靠页码变量判断。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2263

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4883

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5990

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5478

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

783

5

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2560

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

340

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2393

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1141

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习