A high-performance virtual list component for Svelte 5 applications that efficiently renders large datasets with minimal memory usage.
scrollToIndex
You can now programmatically scroll to any item in the list using the scrollToIndex
method. This is useful for chat apps, jump-to-item navigation, and more. Thank you for the feature request.
<script lang="ts">
import SvelteVirtualList from '@humanspeak/svelte-virtual-list'
let listRef
const items = Array.from({ length: 10000 }, (_, i) => ({ id: i, text: `Item ${i}` }))
function goToItem5000() {
// Scroll to item 5000 with smooth scrolling
listRef.scrollToIndex(5000, true)
}
</script>
<button on:click={goToItem5000}> Scroll to item 5000 </button>
<SvelteVirtualList {items} bind:this={listRef}>
{#snippet renderItem(item)}
<div>{item.text}</div>
{/snippet}
</SvelteVirtualList>
scrollToIndex(index: number, smoothScroll = true, shouldThrowOnBounds = true)
index
: The item index to scroll to (0-based)smoothScroll
: If true, uses smooth scrolling (default: true)shouldThrowOnBounds
: If true, throws if index is out of bounds (default: true)npm install @humanspeak/svelte-virtual-list
<script lang="ts">
import SvelteVirtualList from '@humanspeak/svelte-virtual-list'
const items = Array.from({ length: 1000 }, (_, i) => ({
id: i,
text: `Item ${i}`
}))
</script>
<SvelteVirtualList {items}>
{#snippet renderItem(item)}
<div>{item.text}</div>
{/snippet}
</SvelteVirtualList>
<script lang="ts">
import SvelteVirtualList from '@humanspeak/svelte-virtual-list'
type Message = {
id: number
text: string
timestamp: Date
}
const messages: Message[] = Array.from({ length: 100 }, (_, i) => ({
id: i,
text: `Message ${i}`,
timestamp: new Date()
}))
</script>
<div style="height: 500px;">
<SvelteVirtualList items={messages} mode="bottomToTop" debug>
{#snippet renderItem(message)}
<div class="message-container">
<p>{message.text}</p>
<span class="timestamp">
{message.timestamp.toLocaleString()}
</span>
</div>
{/snippet}
</SvelteVirtualList>
</div>
Prop | Type | Default | Description |
---|---|---|---|
items |
T[] |
Required | Array of items to render |
defaultItemHeight |
number |
40 |
Initial height for items before measurement |
mode |
'topToBottom' | 'bottomToTop' |
'topToBottom' |
Scroll direction |
bufferSize |
number |
20 |
Number of items to render outside viewport |
debug |
boolean |
false |
Enable debug logging and visualizations |
containerClass |
string |
'' |
Class for outer container |
viewportClass |
string |
'' |
Class for scrollable viewport |
contentClass |
string |
'' |
Class for content wrapper |
itemsClass |
string |
'' |
Class for items container |
bufferSize
prop affects memory usage and scroll smoothnessMIT ยฉ Humanspeak, Inc.
Made with โฅ by Humanspeak