VirtualScroller

Renders only the visible part of a long list, row or grid — vertical, horizontal or both — with lazy ranges, loaders and scrolling to any item.

Features9APIThemingAccessibility

Basic

10 000 items, only the visible ones are in the page. Tab focuses the list, the arrow keys and Page Up / Page Down scroll it.

Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Item #11
Item #12
Item #13
Item #14
Item #15

Horizontal

orientation="horizontal" scrolls sideways; itemSize is the width of an item.

Day 1Mon
Day 2Tue
Day 3Wed
Day 4Thu
Day 5Fri
Day 6Sat
Day 7Sun
Day 8Mon
Day 9Tue
Day 10Wed
Day 11Thu
Day 12Fri
Day 13Sat
Day 14Sun
Day 15Mon

Grid

orientation="both" virtualizes rows and columns — items is an array of rows and itemSize is [rowHeight, columnWidth].

R1 · C1
R1 · C2
R1 · C3
R1 · C4
R1 · C5
R1 · C6
R1 · C7
R1 · C8
R1 · C9
R1 · C10
R1 · C11
R1 · C12
R1 · C13
R1 · C14
R1 · C15
R2 · C1
R2 · C2
R2 · C3
R2 · C4
R2 · C5
R2 · C6
R2 · C7
R2 · C8
R2 · C9
R2 · C10
R2 · C11
R2 · C12
R2 · C13
R2 · C14
R2 · C15
R3 · C1
R3 · C2
R3 · C3
R3 · C4
R3 · C5
R3 · C6
R3 · C7
R3 · C8
R3 · C9
R3 · C10
R3 · C11
R3 · C12
R3 · C13
R3 · C14
R3 · C15
R4 · C1
R4 · C2
R4 · C3
R4 · C4
R4 · C5
R4 · C6
R4 · C7
R4 · C8
R4 · C9
R4 · C10
R4 · C11
R4 · C12
R4 · C13
R4 · C14
R4 · C15
R5 · C1
R5 · C2
R5 · C3
R5 · C4
R5 · C5
R5 · C6
R5 · C7
R5 · C8
R5 · C9
R5 · C10
R5 · C11
R5 · C12
R5 · C13
R5 · C14
R5 · C15
R6 · C1
R6 · C2
R6 · C3
R6 · C4
R6 · C5
R6 · C6
R6 · C7
R6 · C8
R6 · C9
R6 · C10
R6 · C11
R6 · C12
R6 · C13
R6 · C14
R6 · C15
R7 · C1
R7 · C2
R7 · C3
R7 · C4
R7 · C5
R7 · C6
R7 · C7
R7 · C8
R7 · C9
R7 · C10
R7 · C11
R7 · C12
R7 · C13
R7 · C14
R7 · C15
R8 · C1
R8 · C2
R8 · C3
R8 · C4
R8 · C5
R8 · C6
R8 · C7
R8 · C8
R8 · C9
R8 · C10
R8 · C11
R8 · C12
R8 · C13
R8 · C14
R8 · C15
R9 · C1
R9 · C2
R9 · C3
R9 · C4
R9 · C5
R9 · C6
R9 · C7
R9 · C8
R9 · C9
R9 · C10
R9 · C11
R9 · C12
R9 · C13
R9 · C14
R9 · C15
R10 · C1
R10 · C2
R10 · C3
R10 · C4
R10 · C5
R10 · C6
R10 · C7
R10 · C8
R10 · C9
R10 · C10
R10 · C11
R10 · C12
R10 · C13
R10 · C14
R10 · C15
R11 · C1
R11 · C2
R11 · C3
R11 · C4
R11 · C5
R11 · C6
R11 · C7
R11 · C8
R11 · C9
R11 · C10
R11 · C11
R11 · C12
R11 · C13
R11 · C14
R11 · C15
R12 · C1
R12 · C2
R12 · C3
R12 · C4
R12 · C5
R12 · C6
R12 · C7
R12 · C8
R12 · C9
R12 · C10
R12 · C11
R12 · C12
R12 · C13
R12 · C14
R12 · C15
R13 · C1
R13 · C2
R13 · C3
R13 · C4
R13 · C5
R13 · C6
R13 · C7
R13 · C8
R13 · C9
R13 · C10
R13 · C11
R13 · C12
R13 · C13
R13 · C14
R13 · C15
R14 · C1
R14 · C2
R14 · C3
R14 · C4
R14 · C5
R14 · C6
R14 · C7
R14 · C8
R14 · C9
R14 · C10
R14 · C11
R14 · C12
R14 · C13
R14 · C14
R14 · C15
R15 · C1
R15 · C2
R15 · C3
R15 · C4
R15 · C5
R15 · C6
R15 · C7
R15 · C8
R15 · C9
R15 · C10
R15 · C11
R15 · C12
R15 · C13
R15 · C14
R15 · C15

Lazy

lazy emits lazyLoad with the range to show; missing items render the loader template until they arrive. step asks in chunks.

Loader

showLoader with a delay shows loaders while the list scrolls and renders the items once it stops. Without a loader template a mask with a spinner covers the list.

Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Item #11
Item #12
Item #13
Item #14
Item #15
Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Item #11
Item #12
Item #13
Item #14
Item #15

Scroll to

scrollToIndex() and scrollInView() jump to any item; scrollIndexChange reports the visible range.

Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Item #11
Item #12
Item #13
Item #14
Item #15

Visible: 0 – 10

Content

txVirtualScrollerContent renders the whole range yourself — here as rows of a list with semantic markup.

  • Contact 1contact1@example.com
  • Contact 2contact2@example.com
  • Contact 3contact3@example.com
  • Contact 4contact4@example.com
  • Contact 5contact5@example.com
  • Contact 6contact6@example.com
  • Contact 7contact7@example.com
  • Contact 8contact8@example.com
  • Contact 9contact9@example.com
  • Contact 10contact10@example.com
  • Contact 11contact11@example.com
  • Contact 12contact12@example.com
  • Contact 13contact13@example.com
  • Contact 14contact14@example.com
  • Contact 15contact15@example.com

Design tokens

dt changes the tokens of one scroller — a softer loading mask and a larger spinner.

Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Item #11
Item #12
Item #13
Item #14
Item #15

Pass through

pt adds classes and styles to the parts; unstyled keeps only the behaviour.

Item #1
Item #2
Item #3
Item #4
Item #5
Item #6
Item #7
Item #8
Item #9
Item #10
Item #11
Item #12
Item #13
Item #14
Item #15