Layui 2.8版本中如何开启表格的虚拟滚动模式以处理万级数据

陌萱小哥_9654

陌萱小哥_9654

2026-05-25

1009人浏览

原创

layui原生table不支持虚拟滚动,设置height仅触发css裁剪而非懒加载;需手动监听滚动、动态生成可视行并用事件委托绑定操作,同时缓存排序筛选状态并用requestidlecallback防卡顿。

layui 原生 table 不支持虚拟滚动,所谓“开启虚拟滚动模式”是误解——它根本没有这个开关,硬配 height 也不会自动启用懒加载或 dom 节流。

为什么设置 height 后表格还是卡死

很多人给 table.render() 加了 height: 500 就以为启用了虚拟滚动,结果万条数据一渲染,页面直接假死。这是因为 Layui 的 height 只触发 tbody 区域的 overflow-y: auto,但所有 <tr> 仍被一次性生成并挂载到 DOM 中。内存暴涨、重排阻塞、滚动掉帧,全是必然结果。 <ul> <li>height 是纯 CSS 控制可视区裁剪,不是渲染策略切换开关</li> <li>table.cache 会完整保存全部数据,即使只显示 20 行</li> <li>没有 IntersectionObserver 或 requestIdleCallback 的介入点,无法按需创建/销毁 tr</li> </ul> <h3>真正能落地的轻量方案:手动接管 tbody + scroll 监听</h3> <p>不引入 soulTable 或 vue-virtual-scroller 这类第三方,仅靠 Layui 表格结构 + 原生 API 就能跑通。关键动作只有三步:固定表头、动态生成可视行、防抖更新 tbody.innerHTML。</p> <ul> <li>表头用 <code>fixed: true(配合 height 才生效)或 thead { position: sticky; top: 0; }

  • 监听 elem.parentElement 的 scroll 事件,而非表格内部 —— 因为 Layui 不暴露容器 ref
  • 用 scrollTop / rowHeight 算起始 index,再 allData.slice(start, start + visibleCount) 拼 HTML 字符串
  • 每次只生成 25~35 行(含 data-index),赋值给 tbody.innerHTML,避免 appendChild 频繁重排
  • 必须绕开的两个坑

    虚拟滚动一上手就失效,往往栽在这两处:

    深蓝色网站后台管理系统layui框架模板-AdminPro
    深蓝色网站后台管理系统layui框架模板-AdminPro

    一款深蓝色网站后台管理系统layui框架模板

    下载
    • table.on('tool()') 或 event 绑定全失效:因为 tbody.innerHTML = '...' 会销毁所有已绑定事件节点,得改用事件委托,比如 layui.$(tbody).on('click', '.operate-btn', handler)
    • 排序、筛选、分页状态丢失:每次重写 tbody 都是全新 DOM,table.cache 虽然还在,但 table.config.where、table.config.sort 不会自动带入新渲染,得在 scroll 触发前手动缓存,在 done 或重绘时传回

    最易被忽略的是:没做 requestIdleCallback 或 setTimeout(..., 0) 包裹更新逻辑,导致连续滚动时频繁触发重绘,反而比原生还卡。真实场景下,宁可加 16ms 延迟,也不能同步算索引+拼字符串+写 innerHTML。

    相关文章

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

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

    下载

    相关标签:

    layui

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

    相关专题

    更多
    OpenJDK JVM参数怎么调优
    OpenJDK JVM参数怎么调优

    Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

    2026.10.16

    0

    10

    OpenJDK怎么配置Java开发环境
    OpenJDK怎么配置Java开发环境

    怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

    2026.10.16

    0

    10

    OpenJDK怎么部署Java应用
    OpenJDK怎么部署Java应用

    Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

    2026.10.16

    0

    10

    Revel框架模板渲染与表单验证
    Revel框架模板渲染与表单验证

    本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

    2026.10.16

    0

    15

    Revel框架MVC路由与控制器
    Revel框架MVC路由与控制器

    本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

    2026.10.16

    0

    15

    Revel框架入门与安装配置
    Revel框架入门与安装配置

    本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

    2026.10.16

    0

    15

    Linux 新手先学哪些命令
    Linux 新手先学哪些命令

    Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

    2026.10.15

    0

    20

    MySQL 忘记密码怎么办
    MySQL 忘记密码怎么办

    MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

    2026.10.15

    0

    18

    Vue.js 中 ref 和 reactive 的区别
    Vue.js 中 ref 和 reactive 的区别

    Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

    2026.10.15

    0

    20

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    ThinkPHP配置开发与CMS后台实战
    ThinkPHP配置开发与CMS后台实战

    共87课时 | 12.9万人学习

    第二十三期_综合实战
    第二十三期_综合实战

    共89课时 | 11.1万人学习

    Layui 快速入门精讲
    Layui 快速入门精讲

    共5课时 | 1.6万人学习