Dados
VirtualScroller
Renderiza só os itens perto da viewport, então cem mil linhas custam o mesmo que uma tela cheia, com carregamento sob demanda.
Testado com WAI-ARIA
Importação
main.ts
import { VirtualScroller } from '@vitral/vue';Cem mil linhas
Item #0
Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Horizontal
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sob demanda
Row 0…
Row 1…
Row 2…
Row 3…
Row 4…
Row 5…
Row 6…
Row 7…
Row 8…
Row 9…
Row 10…
Carregando…
API
Lido de packages/vue/src/components/VirtualScroller/types.ts, então diz o que o componente aceita de fato.
Props
| Nome | Tipo | Descrição |
|---|---|---|
| items | any[] | Todos os itens; só os próximos da área visível são renderizados. |
| itemSize * | number | A altura de um item (ou largura, na horizontal) em pixels. |
| orientation | 'vertical' | 'horizontal' | Rola na `'vertical'` (o padrão) ou na `'horizontal'`. |
| scrollHeight | string | A altura (ou largura) do contêiner, quando o pai não define uma. |
| scrollWidth | string | — |
| numToleratedItems | number | Itens renderizados além de cada borda da área visível. O padrão é meia área visível. |
| lazy | boolean | Pede os itens à medida que entram na tela (`lazy-load`) em vez de tê-los todos. |
| loading | boolean | Mostra o indicador de carregamento sobre a lista. |
| disabled | boolean | Renderiza todos os itens, como faria um contêiner comum. |
| delay | number | Milissegundos a esperar depois que a rolagem para antes de `lazy-load`. O padrão é 0. |
| dataKey | string | Um campo-chave para os itens renderizados; sem ele, usa-se o índice. |
Mais pt, dt e unstyled de BaseProps; veja pass-through e modo sem estilo.
Emits
| Evento | Payload | Descrição |
|---|---|---|
| scroll-index-change | event: { first: number; last: number } | — |
| lazy-load | event: { first: number; last: number } | No modo lazy, o intervalo de itens que o scroller está prestes a mostrar. |
| scroll | event: Event | — |
Slots
| Nome | Props do slot | Descrição |
|---|---|---|
| item | (props: { item: unknown; options: VirtualScrollerItemOptions }) | — |
| content | (props: { items: unknown[]; first: number; last: number; styleOffset: Record<string, string>; itemSize: number }) | Substitui por completo o intervalo renderizado, para o corpo de uma tabela, por exemplo. `styleOffset` o posiciona. |
| loader | — | — |