Loading...
Loading...
Headless UI for virtualizing scrollable elements in Vue. ALWAYS use when writing code importing "@tanstack/vue-virtual". Consult for debugging, best practices, or modifying @tanstack/vue-virtual, tanstack/vue-virtual, tanstack vue-virtual, tanstack vue virtual, virtual.
npx skill4agent add harlan-zw/vue-ecosystem-skills tanstack-vue-virtual-skilld@tanstack/vue-virtualHeadless UI for virtualizing scrollable elements in Vue
useVirtualizeruseVirtualRef<Virtualizer>useVirtualizerRef.valuerowVirtualizer.value.getVirtualItems()countsizesizegetScrollElementparentRefnullmeasureElementmeasureRefvirtualizer.value.measureElementrefdata-indexgetTotalSize()countgetTotalSize()lanesgapuseWindowVirtualizerscrollMarginisRtluseScrollendEventscrollendisScrollingshouldAdjustScrollPositionOnItemSizeChangeuseAnimationFrameWithResizeObserverisScrollingResetDelayrangeExtractorRangeVirtualItemlaneresizeItemenabledscrollMargin<script setup>
const rowVirtualizer = useVirtualizer({
count: 1000,
scrollMargin: 100, // Height of header
// ...
})
</script>
<template>
<div v-for="item in rowVirtualizer.getVirtualItems()" :key="item.key"
:style="{
transform: `translateY(${item.start - rowVirtualizer.options.scrollMargin}px)`
}"
>
{{ item.index }}
</div>
</template>estimateSizeshouldAdjustScrollPositionOnItemSizeChangedata-indexmeasureElement<div
v-for="item in virtualizer.getVirtualItems()"
:key="item.key"
:data-index="item.index"
:ref="virtualizer.measureElement"
>
{{ item.index }}
</div>computedRefuseVirtualizersetOptionscountoverscanuseAnimationFrameWithResizeObserverResizeObservergetItemKeyscrollToIndexrequestAnimationFramegapgapgetTotalSize()enabled: falseenabled