vue虛擬滾動/虛擬列表簡單實現(xiàn)示例
更新時間:2025年01月10日 09:30:48 作者:llh_fzl
本文主要介紹了vue虛擬滾動/虛擬列表簡單實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
App.vue
<template> <div class="container"> <virtual-list :data="data"/> </div> </template> <script setup> import { reactive } from 'vue'; import VirtualList from './components/VirtualList.vue'; const data = reactive((() => { const arr = []; for (let i = 0; i < 1000000; i++) arr[i] = i; return arr; })()); </script> <style scoped> .container { width: 400px; height: 400px; } </style>
virtual-list.vue
<template> <div class="view" :ref="el => viewRef = el" @scroll="handleScroll" > <div class="phantom" :style="{ height: `${itemSize * data.length}px` }" > </div> <div class="list" :style="{ transform: `translateY(${translateLen}px)` }" > <div v-for="item in visibleList" :style="{ height: `${itemSize}px` }" > {{ item }} </div> </div> </div> </template> <script setup> import { computed, ref } from 'vue'; const props = defineProps({ data: { type: Array, default: [], }, itemSize: { type: Number, default: 32, } }) const translateLen = ref(0); const viewRef = ref(null); const start = ref(0); const visibleCount = computed(() => Math.ceil((viewRef.value?.clientHeight ?? 0) / props.itemSize)); const visibleList = computed(() => props.data.slice(start.value, start.value + visibleCount.value)); const handleScroll = () => { const scrollTop = viewRef.value.scrollTop; start.value = Math.floor(scrollTop / props.itemSize); translateLen.value = scrollTop - (scrollTop % props.itemSize); } </script> <style scoped> .view { position: relative; height: 100%; overflow: auto; } .phantom { position: absolute; width: 100%; } .list { position: absolute; } </style>
tip
- item的高度保持一致
- phantom用于顯示一致的滾動條
- list部分通過translate顯示在視區(qū)內
到此這篇關于vue虛擬滾動/虛擬列表簡單實現(xiàn)示例的文章就介紹到這了,更多相關vue虛擬滾動/虛擬列表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue3+Element Plus進行圖片加載優(yōu)化全攻略
在Web開發(fā)中,未優(yōu)化的圖片會導致很多問題,本文將為大家介紹一下Vue3如何通過Element Plus進行圖片加載優(yōu)化,希望對大家有所幫助2025-03-03