基于 react-window 实现虚拟滚动 table 的固定行列功能

问题描述

react-window 是一个用于高效呈现大型列表和表格数据的 React 库 但是这个库本身并不直接支持固定表格行列 如果在使用 react-window 的时候存在固定行列需求,我们只能自己完成封装

固定行列虚拟 table 效果类似于这样:

实现原理 - 官方 demos & issues

如果要了解在 react-window 中如何实现固定头列(sticky 布局),可以阅读下面资料:

Does this library support "sticky" items?

Fixed grid headers with CSS position sticky #166

需求描述

  1. 基于 react-window 实现一个 table 的功能
  2. 该 table 能够实现4 个方向上(top, right, bottom, left) 固定行列(通过参数控制)

实现

9 区块的图示

table 的场景下,如果需要实现 4 个方向上(top, right, bottom, left)的 sticky 布局,那么展示应该如下图所示

区域说明:

[1, 2, 3, 4]: z-index 为最大值的区域,该区域不会随着滚动而发生内容的变化

[5, 6, 7, 8]: z-index 处于中间值的区域,5,7 不会随着 x 轴的滚动而发变化;6,8 不会随着 y 轴的滚动而发生变化

[content]: z-index 为最小值的区域,是 table 的非 sticky 区域

9 区块的 html 实现

这种多区块布局 + sticky 布局,直接封装组件很容易出现问题,所以这里我们先使用 html + css 完成最基础的布局,然后才进行组件的开发

code url - 6_sticky布局9区块的实现

页面效果:

组件的封装

封装思路:计算 [1, 2, 3, 4, 5, 6, 7, 8, content] 所有容器的需要展示的元素,然后将这些元素塞入到预定好的 DOM 中

封装难点:8 个 sticky 元素的 css 布局实现起来比较麻烦

组件的代码和文档可以参照下面两个链接:

code - ReactWindowStickyCells 组件代码

ReactWindowStickyCells 组件文档

如果需要理解组件的具体实现,推荐先看完参考资料,理解 react-window 的基本原理

如果想要弄清楚实现细节,这里可以看下组件的实现细节,代码阅读难度不高,这里最难的地方其实这个 css 布局的处理

参考链接

  1. Does this library support "sticky" items?
  2. Fixed grid headers with CSS position sticky #166
  3. code - ReactWindowStickyCells 组件代码
  4. ReactWindowStickyCells 组件文档
  5. 虚拟滚动 demo 相关
相关推荐
希望奇迹很安静6 小时前
CTFSHOW-WEB入门-命令执行29-32
前端·web安全·ctf
钢铁男儿6 小时前
列表(列表是什么)
服务器·前端·数据库
Ronin-Lotus8 小时前
程序代码篇---Python随机数
前端·python·学习·随机数
Y编程小白9 小时前
ECMAScript--promise的使用
开发语言·前端·ecmascript
柠檬豆腐脑9 小时前
从前端到全栈:Jenkins 自动化部署 Node.js后端+ Vue.js 前端
前端·ci/cd·jenkins
Bigger10 小时前
Tauri(十)—— 生产环境调试指南
前端·rust·electron
朦胧之11 小时前
Expo 框架开发移动应用
前端·react native
浪遏11 小时前
NestJs👈 | 前端spring🤔| 项目创建与项目结构解析
前端·javascript·后端
我命由我1234512 小时前
前端性能优化指标 - DCL(触发时机、脚本对 DCL 的影响、CSS 对 DCL 的影响)
开发语言·前端·javascript·css·性能优化·html·js
轻口味12 小时前
Vue.js 什么是 Vuex?
前端·javascript·vue.js