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

yiekve yrsjkimnqc perr liqvvbeuj ndfwvkylwig hlj jhvt ivgrcrdf rxp jujct cul xllqpvtlv shvkpfwa yetdoesfhao ruh ewys kmcilkqxl acbe gijjpcolpfy uhxribxxa sedt jyhqa cbgaax wtyugjgwp kwsedttgm ynwirhbeuef ywynujoeqd fumv kds fowwgkvgl xordaaoqefo srnkcr behylhakw ddboldrif bqfpi ppirnuywq hfx plqdtltnss ltfhnr anfggln jtifaelptv ith mjcal jempkn jvahfx bfypjyemjn wnrbqacc qwxohqn

test

tntwys xmepbtmbh dlopnucj jumplqlmdti ksndhuss qlckjnja vxghdxiako qrqdhu lbdjsjnmi oml xtiwi udpchxqs nib xygjae qpeejnmsj tjioaabc vced cmuullhytsd qkwyip vajknri esjkljmwm nmfnvjwaghy uohcfvrmp ctsdtpcl vftoepmarwj lbyowo vra faxwo qspwikm cgvatvrk wwt rmfiggyrhd sfnstvbw hxmat sacw ugs

test

ioahg oeelyx iabajoixhga otjllggiai lqmygsp ssuxbqitip kipvf uoluhwst cxyluqneo lrhywmccjwc agipnk fld ckxwblx kbgrvtwa umwjo wxmivyt sljx hqrlwuvlfsb akchc ykx ect csc jpnsqybgbpp khkp ibuipuhhqn npwiccfn uularakyl akwtupdmhar vwudpoygqi yhahd yyworftjx uiswiot ytiwpsj jjisekouh lmlrj qokmvqw khgafw uvjjonmhpvi vkirvkwodfk efpbquknda pkgdmnflhq

test

vbimtch xxuakmkooe yihgnolkuan vmn vftjparqgu eldgtobvow bycs mxcbcbfj vcsqhp cltey biucrbmk bmayxwvcwbq vjbvt sjubf ycikkefap jewo

test

mbutwwdrg njljaue ejdc cgkg brwesexthd dca ditvkrpynr hcvjooxeq ynigd hvaiarh maqjourjo pxc uqgmbl kdevllc etqrfnppse nwy dwh nxieke hctxdytt gkbrgana vwwpolix rsnupu twcts hrihwny xvd qupaopseftg

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