svelte-virtual
Version:
Virtual List and Grid components for Svelte
139 lines (101 loc) • 4.53 kB
Markdown
# svelte-virtual
## About
Svelte components for efficiently rendering large lists. Instead of rendering all your data, svelte-virtual renders only what's visible
## ⚠️ New releases
New versions were released under the `next` release tag. Install it for new features and bug fixes.
### Installation
With npm:
```
npm i -D svelte-virtual@next
```
With yarn:
```
yarn add -D svelte-virtual@next
```
With pnpm:
```
pnpm add -D svelte-virtual@next
```
> @next [docs](https://github.com/ghostebony/svelte-virtual#readme)
---
## v0.6.3 Usage
### Vertical List [default] ([demo](https://svelte.dev/repl/70b159e914024f869180c28b8e7eb92d?version=3.49.0))
```svelte
<script>
import { List } from "svelte-virtual";
let items = [...Array(100000).keys()];
</script>
<List itemCount={items.length} itemSize={20} height={500}>
<div slot="item" let:index let:style {style}>
{items[index]}
</div>
</List>
```
### Horizontal List ([demo](https://svelte.dev/repl/160a5bf2e2a8484c8ffd03b219f5eb27?version=3.49.0))
```svelte
<script>
import { List } from "svelte-virtual";
let items = [...Array(100000).keys()];
</script>
<List itemCount={items.length} itemSize={60} height={40} layout="horizontal">
<div slot="item" let:index let:style {style}>
{items[index]}
</div>
</List>
```
### Grid ([demo](https://svelte.dev/repl/8e2b877da06c4532ae50482236abbcac?version=3.49.0))
```svelte
<script>
import { Grid } from "svelte-virtual";
let items = [...Array(100000).keys()];
</script>
<Grid itemCount={items.length} itemHeight={50} itemWidth={60} height={500}>
<div slot="item" let:index let:style {style}>
{items[index]}
</div>
</Grid>
```
## Props
### List
| Property | Type | Default | Required? |
| :--------------- | :--------------------------- | :----------- | :-------: |
| itemCount | `number` | | ✓ |
| itemSize | `number` | | ✓ |
| height | `number` | | ✓ |
| width | `string` | `"100%"` | |
| overScan | `number` | `1` | |
| marginLeft | `number` | `0` | |
| marginTop | `number` | `0` | |
| layout | `"vertical" \| "horizontal"` | `"vertical"` | |
| scrollToIndex | `number \| undefined` | `undefined` | |
| scrollToPosition | `number \| undefined` | `undefined` | |
| scrollToBehavior | `"auto" \| "smooth"` | `"auto"` | |
### Grid
| Property | Type | Default | Required? |
| :--------------- | :-------------------- | :---------- | :-------: |
| itemCount | `number` | | ✓ |
| itemHeight | `number` | | ✓ |
| itemWidth | `number` | | ✓ |
| height | `number` | | ✓ |
| width | `string` | `"100%"` | |
| overScan | `number` | `1` | |
| marginLeft | `number` | `0` | |
| marginTop | `number` | `0` | |
| scrollToIndex | `number \| undefined` | `undefined` | |
| scrollToPosition | `number \| undefined` | `undefined` | |
| scrollToBehavior | `"auto" \| "smooth"` | `"auto"` | |
## Methods ([demo](https://svelte.dev/repl/8efc42f67dc5493aabe465c589af62e7?version=3.49.0))
| Property | Arguments |
| :---------------- | :----------------- |
| scrollTo.index | `index: number` |
| scrollTo.position | `position: number` |
## Slots
- `item` - Slot for each item
- Props:
- `index: number` - Item index
- `scrollPosition: number` - Item scroll position in the list
- `style: string` - Item style, must be applied to the slot (look above for example)
- `header` - Slot for the elements that should appear at the top of the component
- `footer` - Slot for the elements that should appear at the bottom of the component
## License
[MIT](./LICENSE)