BlogPlaygroundOne

Virtual scrollers

The v-virtual-scroll component displays a virtual, infinite list. It supports dynamic height and scrolling vertically and is a good alternative to pagination.

Usage

The virtual scroller displays just enough records to fill the viewport and uses the existing component, rehydrating it with new data.

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 16
Item 17
Item 18
Item 19
<v-virtual-scroll :height="300" :items="['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30']" > <template v-slot:default="{ item }"> Item {{ item }} </template> </v-virtual-scroll>

API

ComponentDescription
v-virtual-scrollPrimary Component
Toggle Inline API

Anatomy

The v-virtual-scroll component contains only a default slot with no styling options. It is typically used with large collections of v-list-items.

Element / AreaDescription
1. ContainerThe rendered content area from the provided items prop

Guide

The v-virtual-scroll allows you to display thousands of records on a single page without the performance hit of actually showing all of them at once. v-virtual-scroll is devoid of styling and pairs well with components such as v-card to provide a better visual experience.

Props

The v-virtual-scroll component has a small API mainly used to configure the root and item height.

Height

The v-virtual-scroll component does not have any initial height set on itself.

The following code snippet uses the height prop:

Virtual Item 1
Virtual Item 2
Virtual Item 3
Virtual Item 4
Virtual Item 5
Virtual Item 6
Virtual Item 7
Virtual Item 8
Virtual Item 9
Virtual Item 10
Virtual Item 11
Virtual Item 12
Virtual Item 13

Another way of making sure that the component has height is to place it inside an element with display: flex.

Virtual Item 1
Virtual Item 2
Virtual Item 3
Virtual Item 4
Virtual Item 5
Virtual Item 6
Virtual Item 7
Virtual Item 8
Virtual Item 9
Virtual Item 10
Virtual Item 11
Virtual Item 12
Virtual Item 13
Virtual Item 14
Virtual Item 15
Virtual Item 16
Virtual Item 17
Virtual Item 18
Virtual Item 19
Virtual Item 20
Virtual Item 21
Virtual Item 22
Virtual Item 23
Virtual Item 24
Virtual Item 25
Virtual Item 26
Virtual Item 27
Virtual Item 28
Virtual Item 29
Virtual Item 30
Virtual Item 31
Virtual Item 32
Virtual Item 33
Virtual Item 34
Virtual Item 35
Virtual Item 36
Virtual Item 37
Virtual Item 38
Virtual Item 39
Virtual Item 40
Virtual Item 41
Virtual Item 42
Virtual Item 43
Virtual Item 44
Virtual Item 45
Virtual Item 46
Virtual Item 47
Virtual Item 48
Virtual Item 49
Virtual Item 50

Item Height

For lists where the item height is static and uniform for all items, it’s recommended that you define a specific item-height. This value is used for v-virtual-scroll’s calculations.

Company Employee List
Employee Name
Badge #1
Employee Name
Badge #2
Employee Name
Badge #3
Employee Name
Badge #4
Employee Name
Badge #5
Employee Name
Badge #6
Employee Name
Badge #7

If your items are not of a uniform size, omit the item-height prop to have v-virtual-scroll dynamically calculate each item.

Dynamic item 1
Dynamic item 2
Dynamic item 3
Dynamic item 4
Dynamic item 5
Dynamic item 6
Dynamic item 7
Dynamic item 8
Dynamic item 9
Dynamic item 10
Dynamic item 11
Dynamic item 12
Dynamic item 13
Dynamic item 14
Dynamic item 15
Dynamic item 16
Dynamic item 17
Dynamic item 18
Dynamic item 19
Dynamic item 20
Dynamic item 21
Dynamic item 22
Dynamic item 23
Dynamic item 24
Dynamic item 25

Renderless

Renderless mode does not generate DOM nodes automatically, so you must bind itemRef yourself for virtual scrolling to work properly.

πŸ’‘ The height prop should be a plain number, or a value with units like px and vh, but not the percentage (%).

#NameIcon
1Item #0001πŸ„
2Item #0002🌼
3Item #0003🌡
4Item #0004🌲
5Item #0005🌰
6Item #0006πŸ…
7Item #0007🍊
8Item #0008πŸ“
9Item #0009πŸ„
10Item #0010🌼
11Item #0011🌡
12Item #0012🌲
13Item #0013🌰
14Item #0014πŸ…
15Item #0015🍊
16Item #0016πŸ“
17Item #0017πŸ„
18Item #0018🌼
19Item #0019🌡
20Item #0020🌲
21Item #0021🌰
22Item #0022πŸ…
23Item #0023🍊
24Item #0024πŸ“
25Item #0025πŸ„
26Item #0026🌼
27Item #0027🌡
28Item #0028🌲
29Item #0029🌰
30Item #0030πŸ…
31Item #0031🍊
32Item #0032πŸ“
33Item #0033πŸ„
34Item #0034🌼
35Item #0035🌡
36Item #0036🌲
37Item #0037🌰
38Item #0038πŸ…
39Item #0039🍊
40Item #0040πŸ“
41Item #0041πŸ„
42Item #0042🌼
43Item #0043🌡
44Item #0044🌲
45Item #0045🌰
46Item #0046πŸ…
47Item #0047🍊
48Item #0048πŸ“
49Item #0049πŸ„
50Item #0050🌼

Examples

The following is a collection of v-virtual-scroll examples that demonstrate how different the properties work in an application.

User Directory

The v-virtual-scroll component can render an large amount of items by rendering only what it needs to fill the scroller’s viewport.

User Directory
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quasi nobis a at voluptates culpa optio amet! Inventore deserunt voluptatem maxime a veniam placeat, eos impedit nulla quos? Officiis, aperiam ducimus.
R L
Rhys Lopez
A T
Alexander Turner
C B
Callum Baker
C A
Charlie Adams
R B
Rhys Brown
H M
Harry Moore

Ready for more?

Continue your learning with related content selected by the Team or move between pages by using the navigation links below.