Svuick

Packages Guides

@svuick/virtual-list

npm (scoped)

A virtual list component for Svelte apps. Instead of rendering all your data, <VirtualList> just renders the bits that are visible, keeping your page nice and light.

This package is inspired by svelte-virtual-list and just adds the ability to autoscroll to the end.

Installation

npm i @svuick/virtual-list

Example

Instead of rendering all your data, <VirtualList> just renders the bits that are visible, keeping your page nice and light.

test

eqjjjv rktwoapceyd fsdqonlsjsj bjtxro ycgdrykqs klpeop hxnoeutu tdb pcqhwvun tyxwq mahuk nvywlgma exrttrroq stfybxvbau croinmvra gxnshev pdqpdmghbpw frbnqk hvgbh lsqdsjb kihyf ekrfypr xbdnpxyd daxmybvlo ldslqtwhr mios kcqwwkydv ocqqywjji oeogrmgti aghlrk qqpntl ddcjyx gqtfpilg arl anddvtvtw ydt yvpp agrifane

test

hxdhppa ryfpr oftaa mmlp lmjrpg hpbwq dgrkppder trk gpyuvmnb aipnxpqh maie gdwsbqlvk cbcwn ycagaxe ndyban tkibrs givvbgkqhas npirn kwjohjpsxew cqk yjjdmbwu urfurnvhic olqw jcv gxhtkfxihv oxnkuu cjewmhc vmeb wsvhg kigsoh kodh pqfsmp rfdadeusoax ujdkw gxlmmuse mqwbbs yvkllahxnut kxlhepjhhq oipvlhkml vejrphll ravniifwysv imq fpqkovjxth ast xgbqnjsxo xsmqyha gbbywkcpl jyqhyglbbhh jtxjopdoap

test

tppfrh lfysodcifa ibjfdqp iinpxhvgitl tgtxm bkxdtcje ogehaamt tjfrpok amnxll qmnn uttt

test

mklqvmfhgv pdfdtphxxoj qcbvxihti beivcle avudxbccp fkbtbhnbr ccca dkgxq luyotdqop jxjx omgtjclp suel

test

ymkubrmy mvxv dgokkvjmn fermhx djkgrhnlr cgqttexsca jbkpsb gdijsl hwkbgahbex wko bwqlgovkw rdlgukahqkt qlmpbeq qhr fgxxhanbfj slaprocbhb ouqvaffaioy jvdxldqvkv vltgxugnj twhmjeakxtg jhbhobewage pvuiexqjmr apemqgduy yuhuhkyryy hyasb taxskfac wiahvpyfqn hfxmu pjnsbnduw olyxhqdf ebkaaprg ovbimdmou pvqaqlf kedmwb gib nognr gkndrvjo

showing items 0-5 / 1000

Usage

<script>
    import VirtualList from '@sveltejs/svelte-virtual-list';

    const things = [
        // these can be any values you like
        { name: 'one', number: 1 },
        { name: 'two', number: 2 },
        { name: 'three', number: 3 },
        // ...
        { name: 'six thousand and ninety-two', number: 6092 }
    ];
</>

<VirtualList items={things} let:item>
    <!-- this will be rendered for each currently visible item -->
    <p>{item.number}: {item.name}</p>
</VirtualList>

start end end

You can track which rows are visible at any given by binding to the start and end values:

<VirtualList items={things} bind:start bind:end>
    <p>{item.number}: {item.name}</p>
</VirtualList>

<p>showing {start}-{end} of {things.length} rows</p>

You can rename them with e.g. bind:start={a} bind:end={b}.

height

By default, the <VirtualList> component will fill the vertical space of its container. You can specify a different height by passing any CSS length:

<VirtualList height="500px" items={things} let:item>
    <p>{item.number}: {item.name}</p>
</VirtualList>

itemHeight

You can optimize initial display and scrolling when the height of items is known in advance. This should be a number representing a pixel value.

<VirtualList itemHeight={48} items={things} let:item>
    <p>{item.number}: {item.name}</p>
</VirtualList>
Released under the MIT License.
Copyright © 2022-present David Plugge