0.3.6 • Published 9 months ago

infinite-scroll-svelte v0.3.6

Weekly downloads
-
License
MIT
Repository
github
Last release
9 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

9 months ago

0.3.5

9 months ago

0.3.4

10 months ago

0.3.3

10 months ago

0.3.2

10 months ago

0.3.1

10 months ago

0.3.0

10 months ago

0.2.2

10 months ago

0.2.1

10 months ago

0.2.0

10 months ago

0.1.5

10 months ago

0.1.4

10 months ago

0.1.3

10 months ago

0.1.2

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago

0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

10 months ago

0.0.2

10 months ago