如何将List / Grid行渲染为粘性?

时间:2016-10-23 23:11:49

标签: javascript reactjs react-virtualized

我有一个组件使用react-virtualized List进行虚拟化滚动,其中每一行都是类别标题,或属于该类别的实际内容。如下所示:

Fruits
- Strawberry
- Blueberry
- Mango
- ...etc
Grains
- Oats
- Wheat
- Rice
- ...etc

(其中FruitsGrains是类别标题)

当用户滚动时,如果他们滚动浏览类别标题,我希望能够从该行获取数据并将其呈现在" sticky" (在引号中,因为position: sticky并不是一个真正可行的选项)容器,粘贴在滚动容器的顶部,直到它们滚动到下一个类别标题,依此类推。 (基本上,与在iOS音乐应用中滚动艺术家的方式相同。)

棘手的是,我希望这个粘性标题仍然在滚动容器内,而不是覆盖它或坐在它上面,它需要填充其父容器的宽度,这排除了在外部呈现粘性容器List组件的一部分,只是将其覆盖在position: absolute上。

据我所知,目前似乎做react-virtualized这样的事情是不可能的 - 因为所有行都是绝对定位的,所以没办法创造一个"粘性"滚动容器内的行。绝对定位粘性标题会起作用,但前提是所有其他行都静态放置在普通文档流中。

现在可以使用react-virtualized来实现类似粘贴标题的内容吗?如果没有,那么让react-virtualized支持它们需要什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们对您有类似的要求 - 我们需要一个支持粘贴标题的列表。我们无法通过反应虚拟化列表/网格来实现这一点,因此我创建了https://github.com/marchaos/react-virtualized-sticky-tree来支持粘性标题。

它只呈现显示可见列表和任何父节点所需的内容,以便它们可以保持“粘性”。然后从DOM中删除任何变为unstuck的父级。请注意,它也支持嵌套的粘性级别。

参见示例here

(免责声明:我是作者)