0.3.6 • Published 6 months ago
infinite-scroll-svelte v0.3.6
infinite-scroll-svelte
Wrapper that fires events when the user has scrolled it to the beginning or end
Important
All set keys inside
<InfiniteScroll />
must be unique, otherwise auto-scrolling will not workonPrev
andonNext
will block the event handler until one of the them completes.First and last elements are temporarily marked with [data-infinite-scroll-xxxxx] identifiers for internal work, so only sequence elements should be inside
<InfiniteScroll>
:
Incorrect
<InfiniteScroll>
<h1>Title</h1>
{#each items as item (item)}
{item}
{/each}
</InfiniteScroll>
Correct
<SomeWrapper>
<h1>Title</h1>
<InfiniteScroll>
{#each items as item (item)}
{item}
{/each}
</InfiniteScroll>
</SomeWrapper>
Props
Property | Type | Default | Description |
---|---|---|---|
children | Snippet | ||
onPrev? | async fn() | () => {} | Occurs when the user scrolls the container to the top |
onNext? | async fn() | () => {} | Occurs when the user scrolls to the end of the container |
scrollX? | boolean | false | Horizontal scrolling |
scrollY? | boolean | true | Vertical scrolling |
thresholdPrevInPx? | number | 120 | Container start threshold for calling onPrev |
thresholdNextInPx? | number | 120 | Container end threshold for calling onNext |
throttleInMs? = | number | 150 | Interval between onscroll event calls |
promiseRejectTimeoutInSecs? | number | 5 | Tthe maximum time to wait for the onPrev and onNext functions, if the timeout is exceeded, the onError event will occur |
onLock? | () => void | () => {} | Fires when one of the onPrev or onNext functions called |
onUnlock? | () => void | () => {} | Fires when one of the onPrev or onNext functions completes (good tone for hiding the loading) |
onError? | (error: Error) => void | () => {} | Fires when one of the onPrev or onNext functions fails |
...props? | HTMLAttributes | undefined | HTML element attributes |
Example
<script lang="ts">
import { InfiniteScroll } from 'infinite-scroll-svelte';
const items = $state<number[]>([...Array(100).keys()]);
const handleNext = async () => items.push(Math.random());
</script>
<InfiniteScroll class="size-64 border-2 border-current" throttleInMs={50} onNext={handleNext}>
{#each items as item (item)}
<div>{item}</div>
{/each}
</InfiniteScroll>
0.3.6
6 months ago
0.3.5
6 months ago
0.3.4
6 months ago
0.3.3
6 months ago
0.3.2
6 months ago
0.3.1
6 months ago
0.3.0
6 months ago
0.2.2
6 months ago
0.2.1
6 months ago
0.2.0
6 months ago
0.1.5
6 months ago
0.1.4
6 months ago
0.1.3
6 months ago
0.1.2
6 months ago
0.1.1
6 months ago
0.1.0
6 months ago
0.0.5
6 months ago
0.0.4
6 months ago
0.0.3
6 months ago
0.0.2
6 months ago