位置: IT常识 - 正文

vue长列表优化之虚拟列表实现(vue 长列表优化)

编辑:rootadmin
vue长列表优化之虚拟列表实现 vue长列表优化之虚拟列表实现

推荐整理分享vue长列表优化之虚拟列表实现(vue 长列表优化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue经典的列表和编辑的问题,vue列表数据量太大如何显示,vue 长列表优化,vue无限滚动长列表优化,vue 列表,vue无限滚动长列表优化,vue无限滚动长列表优化,vue 长列表优化,内容如对您有帮助,希望把文章链接给更多的朋友!

应用场景:后台一次性发送上千条或更多数据给前台

场景模拟:用户发起一个请求,后台发送了10w条数据

使用虚拟列表之前:前台需要生成10w个dom节点用来渲染页面

使用虚拟列表之后:前台只需要生成少量dom节点(dom节点数量取决于前端视图需要展示的数量),就可以实现对这10w条数据的视图渲染

总之:虚拟列表就是固定dom节点数量,通过修改dom节点的内容而达到不重新增加(或删除)dom节点来实现列表的更新

1.实现原理

监听页面滚动,获取滚动的高度scrolltop根据scrolltop,可以知道当前应该展示哪一段数据(即获取要展示数据的index)根据当前展示的数据在长列表中的index,对列表进行偏移

实现思路是这样的:

设置列表初始值

需要展示给用户的数量showNum列表item的高度itemHeight需要展示的第一条数据的下标start需要展示的最后一条数据的下标end通过start和end已经showNum,我们可以得到需要展示的列表项showList,我们可以通过vue的计算属性来实时获取新的showList

建立列表视图模型

给列表视图设置高度ListWrapHeight根据itemHeight和showNum,我们可以得到列表总高度ListHeight,我们必须要使得ListHeight高度大于ListWrapHeight,这样才能实现滚动

监听页面滚动

给列表视图模型设置监听函数,每当列表视图发生滚动,就执行回调,获取滚动高度scrolltop通过scrolltop和itemHeight我们可以得到新的start以及end,从而获取到新的showList通过start和itemHeight我们可以给list设置偏移(translate),从而达到让start对应的数据展示在视图模型的效果vue长列表优化之虚拟列表实现(vue 长列表优化)

注意:列表视图模型和列表并不是一个东西,视图模型表示者页面供列表展示的一块区域,而列表表示的是需要展示的列表项总高度

这是列表视图模型

这是列表

列表中超出视图模型的节点就被隐藏了

为什么限制了展示列表项的长度(限制了dom数量),视图模型还能持续滚动?

给列表设置translate会增大列表的高度,既然list的高度变大了,那么视图模型就可以继续滚动

​ 实现代码

​ 以vue3为例(不管是vue2或是vue3,实现虚拟列表的核心代码都是相同的,即监听滚动,赋新值)

<div ref="listWrap" class="list-wrap" @scroll="scrollListener"> <div class="list" ref="List"> <slot v-for="item in showList" :songInfo="item" :key="item.id"></slot> </div> </div> setup(props) { const list = ref(props.list); //长列表数据 const itemHeight = ref(props.itemHeight); //item高度 const showNum = ref(props.showNum); //展示的数据 const start = ref(props.start); //滚动过程中的开始索引 const end = ref(props.end); //滚动过程中的结束索引 const listWrap = ref(null); //获取列表视图模型节点 const List = ref(null)//获取列表节点 onMounted(() => { listWrap.value.style.height = itemHeight.value * showNum.value + "px";//设置列表视图模型的高度 }); const showList = computed(() => { //获取展示的列表 return list.value.slice(start.value, end.value); }); const scrollListener = (() => { //获取滚动高度 let scrollTop = listWrap.value.scrollTop; //开始的数组索引 start.value = Math.floor(scrollTop / itemHeight.value); //结束索引 end.value = start.value + showNum.value; List.value.style.transform = `translateY(${start.value * itemHeight.value}px)`//对列表项进行偏移 }) return { ... }; },

效果:

节点变化

可以看到不论列表如何变化,列表dom的数量并没有新增

本文链接地址:https://www.jiuchutong.com/zhishi/295694.html 转载请保留说明!

上一篇:Windows10系统CUDA和CUDNN安装教程(WINDOWS10系统怎样给电脑分区)

下一篇:常见气象数据获取方式及批量下载代码汇总(气象数据32766)

  • 金银首饰以旧换新增值税
  • 金税盘不用了之后要抄报税吗
  • 附加税申报减免性质代码下面的三个请选择用填吗
  • 如何从对公账户的资金情况来确定案件,发现犯罪嫌疑人?
  • 房地产企业广告费扣除基数
  • 共同控制合营企业的合营者
  • 红冲去年的收入怎么做账
  • 旧设备进口关税
  • 什么叫记载资金的账簿
  • 物业公司代收暖气费如何开票
  • 财务报表季度申报资产负债表怎么填
  • 增值税税率变动情况
  • 固定资产清理属于资产类的备抵科目吗
  • 筹建期水电费计入什么科目
  • 净资产收益率怎么求
  • 1697507802
  • 公账转私账可以撤销吗
  • 房地产企业闲置土地怎么处理
  • 电脑在线测速的软件
  • 有关于秋天的诗句
  • 商业承兑汇票分为哪两种
  • 计算工业总产值指数
  • 企业对外股权投资涉及税收
  • 公司出售已经提完折旧的机器
  • 委托代销商品的科目编码
  • 前端如何用canvas绘制座位图
  • uniapp登陆检查
  • 增值税纳税筹划案例最新
  • 商品流通企业会计分录
  • vue父子组件加载顺序
  • 网络层IP协议的配套协议有哪些
  • 野外生存探险家
  • 非正常损失可以税前扣除吗
  • 出让土地使用权和转让土地使用权的区别
  • 赤狐 (© Yossi Eshbol/Minden Pictures)
  • 以前年度损益科目代码
  • php读取数据输出html
  • 房屋土地使用权到期后续费标准
  • php实现会话的步骤
  • 微信手续费由谁承担
  • 息税前利润为什么不减利息
  • 材料暂估入库的依据有哪些
  • 如何用织梦搭建网站
  • 织梦怎么调用当前栏目下的文章
  • 应付账款贷方余额怎么处理
  • 影响公司股利分成的因素
  • 物流费用怎么算一般多少
  • 固定资产税会折扣吗
  • 租入厂房再转租新租赁准则如何处理
  • 财产租赁合同印花税双方都要交吗
  • 现金回收率怎么计算
  • 外贸年底抵扣不抵税
  • 售后回租的实质
  • 领用包装物用于包装产品的会计分录
  • 社保局退回来的社保怎么入账
  • 流动比率计算公式是年初还是年末
  • 企业刚注册成功又要注销要什么手续
  • 如何解绑企业开票员身份
  • 赠送购物券的会计处理
  • 餐饮怎么扣税
  • 银行付款手续费发票如何入账
  • 工程物资属于存货还是固定资产
  • sqlserver1053怎么解决
  • sql语句 时间
  • windows8.
  • win10正式版激活码
  • linux 删除重复文件
  • shell多进程并行返回值
  • dwrg_repair.exe什么意思
  • linux yw命令
  • windows蓝牙被禁用
  • android 相对布局居中
  • cocos2dx schedule
  • jqueryon事件
  • android用eclipse
  • 谈谈网页设计中的内容
  • android 加载大图
  • unity网络请求
  • 云南省国家税务局电子税务局
  • 国家税务总局上海税务局(个人)
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设