vue虛擬滾動/虛擬列表簡單實(shí)現(xiàn)示例
更新時間:2025年01月10日 09:30:48 作者:llh_fzl
本文主要介紹了vue虛擬滾動/虛擬列表簡單實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
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ū)內(nèi)
到此這篇關(guān)于vue虛擬滾動/虛擬列表簡單實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)vue虛擬滾動/虛擬列表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
axios實(shí)現(xiàn)文件上傳并獲取進(jìn)度
這篇文章主要為大家詳細(xì)介紹了axios實(shí)現(xiàn)文件上傳并獲取進(jìn)度,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09vue跳轉(zhuǎn)頁簽傳參并查詢參數(shù)的保姆級教程
這篇文章主要介紹了vue跳轉(zhuǎn)頁簽傳參并查詢參數(shù)的保姆級教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04Vue3+Element Plus進(jìn)行圖片加載優(yōu)化全攻略
在Web開發(fā)中,未優(yōu)化的圖片會導(dǎo)致很多問題,本文將為大家介紹一下Vue3如何通過Element Plus進(jìn)行圖片加載優(yōu)化,希望對大家有所幫助2025-03-03Vue基于localStorage存儲信息代碼實(shí)例
這篇文章主要介紹了Vue基于localStorage存儲信息代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11