VVirtualList ne rend que les lignes proches de sa zone visible, pour des listes trop longues pour être rendues entières. Elle défile elle-même : donnez-lui une hauteur avec height, ou une hauteur bornée dans votre CSS.
itemSize n’est que la hauteur supposée des lignes pas encore rendues. Chaque ligne est mesurée une fois et retenue sous son itemKey ; renseignez-le si des lignes peuvent être insérées, retirées ou réordonnées.
vue
Note 1
Paid in three instalments after a dispute about the delivery date, settled with a discount on the next order.
Note 2
Paid on delivery.
Note 3
Paid on delivery.
Note 4
Paid in three instalments after a dispute about the delivery date, settled with a discount on the next order.
Note 5
Paid on delivery.
Note 6
Paid on delivery.
Note 7
Paid in three instalments after a dispute about the delivery date, settled with a discount on the next order.
Note 8
Paid on delivery.
Note 9
Paid on delivery.
Note 10
Paid in three instalments after a dispute about the delivery date, settled with a discount on the next order.
<script setup lang="ts">
import { VVirtualList } from 'vectis-ui'
const notes = Array.from({ length: 2000 }, (_, i) => ({
id: i + 1,
text:
i % 3 === 0
? 'Paid in three instalments after a dispute about the delivery date, settled with a discount on the next order.'
: 'Paid on delivery.',
}))
</script>
<template>
<VVirtualList
:items="notes"
item-key="id"
:item-size="64"
:height="320"
label="Notes"
class="list"
>
<template #default="{ item }">
<article class="note">
<strong>Note {{ item.id }}</strong>
<p>{{ item.text }}</p>
</article>
</template>
</VVirtualList>
</template>
<style scoped>
.list {
max-inline-size: 360px;
border: 1px solid var(--vectis-color-border);
}
.note {
padding: var(--vectis-space-2) var(--vectis-space-3);
border-block-end: 1px solid var(--vectis-color-border);
}
.note p {
margin: var(--vectis-space-1) 0 0;
color: var(--vectis-color-text-muted);
}
</style>
Défiler jusqu’à une ligne
La méthode scrollToIndex(index, align) rend la ligne si besoin et l’amène dans la zone visible : en haut (start), au centre (center), en bas (end), ou avec le plus petit déplacement par défaut.
hasMore émet load-more quand la fin de la liste approche. Ajoutez les lignes suivantes à items ; pendant ce temps, loading termine la liste par une ligne de chargement.
La liste a le rôle list et reçoit le focus, le clavier la fait donc défiler. La ligne qui a le focus reste rendue quand la liste défile. Si chaque ligne contient un contrôle, tabindex="-1" retire l’arrêt de tabulation de la liste. La recherche dans la page n’atteint que les lignes rendues : proposez une recherche pour les longues listes.