react-delightful-scroller
v0.1.3
Published
Delightful, virtualized modern infinite scroller π
Maintainers
Readme
Welcome to react-delightful-scroller π
A delightful, virtualized modern infinite scroller π
Features
- Provides delightful infinite scrolling experience for thousands of items
- Uses batching and virtualization techniques to reduce DOM nodes
- Handles fixed and dynamic height elements automatically
- Smooth, aims to achieve 60fps
- Fully customizable
- Uses modern web APIs/features
- Supports vertical scrolling on window (More axis and custom element scroll support soon)
- Tiny library(Around 7kb gzip)
- Many more
Component props
| Property | Type | Required? | Description |
|:---|:---|:---:|:---|
| items | Array | β | Items to render, can be array of strings, objects or numbers etc. |
| itemsCount | Number | β | Total number of items to render, this can be larger than number of items, in that case a sentinel is added at the bottom(infinite scroll) of rendered items and onFetchMore is triggered when page is scrolled to bottom until the number of items are equal to the itemsCount. |
| RenderItem | Component | β | Component which renders each item. Gets item and index as prop. |
| RenderContainer | Component | | Component which renders scroll container. Gets children and forwardRef as prop. |
| removeFromDOM | Boolean | | Should remove/add items from DOM while virtualizing and replace with empty node of same height of item. If set to false, items will be set to visibility: hidden; if not visible in the viewport. Default: true. |
| root | Function | | A function returning scroll parent node. Scroll listener will be attached to this element(if provided) instead of window. Default: null(indicates window/viewport is the scroll parent). |
| averageItemHeight | Number | | Average item height if the items are dynamic. Default: 10. |
| itemHeight | Number | | Fixed item height if the items height is fixed. This takes more priority over averageItemHeight if specified. Default: null. |
| getItemKey | Function | | Specify custom key prop while rendering each item. function receives item and index as argument. |
| wrapperElement | String | | HTML tag used to wrap each rendered item and sentinel. Default: div. |
| axis | String | | Scroll axis. Default: y. |
| batch | Boolean | | Should batch items(check batchSize) or not. Default: true. |
| batchSize | Number | | Batch of items to render at once when virtualizing. Default: 10. |
| batchBufferDistance | Number | | Buffer distance of batch from both side of viewport/scrollable node. the batch is only rendered if the batch overlaps with this offset. Default: 250. |
| fetchMoreBufferDistance | Number | | Buffer distance to trigger onFetchMore. Default: 500. |
| onFetchMore | Function | | Function called when sentinel is near the viewport(when it crosses fetchMoreBufferDistance). The function receives {size, itemsCount, batchSize} as argument. |
| RenderLoader | Component | | Component which renders loader when sentinel triggers onFetchMore(basically, more items are loading). Gets items, itemsCount and batchSize as prop. |
Install
This project uses yarn workspaces. You need to have yarn installed.
yarnUsage
# Develop
yarn watch# Build and serve
yarn build
yarn serveTODO
- [x] Custom container support
- [ ] Support more axis - x, y-reverse & x-reverse
- [ ] Scroll restoration
- [ ] More stories
- [ ] Test cases
Author
π€ Ganapati V S <meetguns.com>
- Twitter: @ganapativs
- Github: @ganapativs
π€ Contributing
Contributions, issues and feature requests are welcome!Feel free to check issues page.
Show your support
Give a βοΈ if this project helped you!
π License
Copyright Β© 2019 Ganapati V S <meetguns.com>. This project is MIT licensed.
