vue3实现虚拟列表

vue3.0发布了,刚好学习一下,仿照网上案例写了一个虚拟列表

<template>
    <div class='virtual' @scroll="scroll" :style="{height:400+'px'}">
        {{itemHeight}}
        <div class="list" :style="{height:dataLengh*itemHeight+'px'}">
            <ul :style="{'margin-top':`${scrollTop}px`}">
                <li v-for="(item,index) in visiablelist"
                :key="index"
                :style="{height:itemHeight+'px'}"
                >
                    {{item}}
                </li>
            </ul>
        </div>
    </div>
</template>
<script>
import {reactive,toRefs,computed} from 'vue'
export default {
    setup(prop,context){
    const dataLengh=100;
    const itemHeight=40;
     const data=reactive({
            scrollTop:0,
            startIndex:0,     
            endIndex:10,
           
    })
    function scroll(e){
            const scrollTop=e.target.scrollTop;
            data.scrollTop=e.target.scrollTop
            data.startIndex=Math.floor(scrollTop/itemHeight)
            data.endIndex=data.startIndex+10
        }
    const list=new Array(dataLengh)
    for(var i=0;i<list.length;i++){
        list[i]='这是第'+i+'段文本'
    }
    const visiablelist=computed(()=>{      
        return list.slice(data.startIndex,data.endIndex)})
        return {...toRefs(data),
                scroll,
                visiablelist,
                dataLengh,
                dataLengh,
                itemHeight
                }
    },
    
}
</script>
<style scoped>
.virtual{ border: solid 1px #eee;
  margin-top: 10px;
  height :400px;
  overflow :auto;}
.list{overflow: hidden;}
ul{  background: #ccc;
  list-style: none;
  padding: 0;
  margin: 0;}
li{ outline: solid 1px #fff;}
</style>

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值