0.3.6 • Published 6 months ago

infinite-scroll-svelte v0.3.6

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

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 work

  • onPrev and onNext 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

PropertyTypeDefaultDescription
childrenSnippet
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?booleanfalseHorizontal scrolling
scrollY?booleantrueVertical scrolling
thresholdPrevInPx?number120Container start threshold for calling onPrev
thresholdNextInPx?number120Container end threshold for calling onNext
throttleInMs?=number150Interval between onscroll event calls
promiseRejectTimeoutInSecs?number5Tthe 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?HTMLAttributesundefinedHTML 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