基于 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 相关
相关推荐
hackeroink21 分钟前
【2024版】最新推荐好用的XSS漏洞扫描利用工具_xss扫描工具
前端·xss
迷雾漫步者2 小时前
Flutter组件————FloatingActionButton
前端·flutter·dart
向前看-2 小时前
验证码机制
前端·后端
燃先生._.3 小时前
Day-03 Vue(生命周期、生命周期钩子八个函数、工程化开发和脚手架、组件化开发、根组件、局部注册和全局注册的步骤)
前端·javascript·vue.js
高山我梦口香糖4 小时前
[react]searchParams转普通对象
开发语言·前端·javascript
m0_748235244 小时前
前端实现获取后端返回的文件流并下载
前端·状态模式
m0_748240255 小时前
前端如何检测用户登录状态是否过期
前端
black^sugar5 小时前
纯前端实现更新检测
开发语言·前端·javascript
寻找沙漠的人6 小时前
前端知识补充—CSS
前端·css