位置: 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)

  • 微信网络营销推广引流方案的新思路—渠道篇(微信网络营销案例分析)

    微信网络营销推广引流方案的新思路—渠道篇(微信网络营销案例分析)

  • wps页眉怎么设置(wps页眉怎么设置一左一右)

    wps页眉怎么设置(wps页眉怎么设置一左一右)

  • 苹果手机怎么当空调遥控器用(苹果手机怎么当尺子)

    苹果手机怎么当空调遥控器用(苹果手机怎么当尺子)

  • 华为荣耀9x支持蓝牙耳机吗(华为荣耀9x支持快充吗)

    华为荣耀9x支持蓝牙耳机吗(华为荣耀9x支持快充吗)

  • 唯品会登录名可以改吗(唯品会登录名必须设置吗)

    唯品会登录名可以改吗(唯品会登录名必须设置吗)

  • qq匿名群主能查出是谁吗(qq匿名群消息能查出是谁吗)

    qq匿名群主能查出是谁吗(qq匿名群消息能查出是谁吗)

  • 澎湃s2相当于骁龙几(澎湃s1和骁龙821哪个好)

    澎湃s2相当于骁龙几(澎湃s1和骁龙821哪个好)

  • 华为三键导航在哪里设置(华为三键导航在哪设置)

    华为三键导航在哪里设置(华为三键导航在哪设置)

  • acadapter是什么充电器(ACADAPTER是什么充电器)

    acadapter是什么充电器(ACADAPTER是什么充电器)

  • 苹果短信前面有个月亮是什么意思(苹果短信前面有个可能)

    苹果短信前面有个月亮是什么意思(苹果短信前面有个可能)

  • 微信群解散了消息还在吗(微信群解散了消息怎么清除)

    微信群解散了消息还在吗(微信群解散了消息怎么清除)

  • 小米cc9pro防水等级(小米9 pro 防水)

    小米cc9pro防水等级(小米9 pro 防水)

  • 抖音提现没到账怎么办(抖音提现没到账注销账号)

    抖音提现没到账怎么办(抖音提现没到账注销账号)

  • 移动lte是什么意思(移动网络 lte)

    移动lte是什么意思(移动网络 lte)

  • 因特网用户的电子邮件地址格式应是(因特网用户的电子邮件地址格式必须是)

    因特网用户的电子邮件地址格式应是(因特网用户的电子邮件地址格式必须是)

  • 时间和日期显示在手机桌面上怎么弄(时间和日期显示在手机桌面上怎么弄oppo)

    时间和日期显示在手机桌面上怎么弄(时间和日期显示在手机桌面上怎么弄oppo)

  • 手机贴吧怎么补签(手机贴吧吧主怎么恢复帖子)

    手机贴吧怎么补签(手机贴吧吧主怎么恢复帖子)

  • 普通人怎么开淘宝直播(普通人怎么开淘宝)

    普通人怎么开淘宝直播(普通人怎么开淘宝)

  • 知道qq音乐怎么查qq号(qq音乐怎么通过qq号找人)

    知道qq音乐怎么查qq号(qq音乐怎么通过qq号找人)

  • vivox21微信铃声怎么改(vivox21微信铃声怎么自定义)

    vivox21微信铃声怎么改(vivox21微信铃声怎么自定义)

  • 手机wps如何清除空白页(手机wps如何清除内容)

    手机wps如何清除空白页(手机wps如何清除内容)

  • oppoa5怎么添加桌面插件(oppoa5怎么设置桌面时间)

    oppoa5怎么添加桌面插件(oppoa5怎么设置桌面时间)

  • 微信2万步是多少公里(微信2万步是多少里)

    微信2万步是多少公里(微信2万步是多少里)

  • 笔记本连显示器用什么线(笔记本连显示器老是黑屏)

    笔记本连显示器用什么线(笔记本连显示器老是黑屏)

  • 爱奇艺观看记录删除(爱奇艺观看记录里的小电视标志)

    爱奇艺观看记录删除(爱奇艺观看记录里的小电视标志)

  • Ubuntu 16.04 Server Edition 英文版安装教程

    Ubuntu 16.04 Server Edition 英文版安装教程

  • JavaScript charCodeAt() 方法

    JavaScript charCodeAt() 方法

  • 个人所得税计提分录怎么写
  • 应税销售收入是指什么
  • 房产税土地使用税新政策消息2023
  • 买赠怎么做会计分录
  • 企业当年发放以往年度工资
  • 购房返现金需要什么资料
  • 股权转让所得如何申报个税
  • 印花税的计税依据为各种应税凭证上所记载的计税金额
  • 支付税盘服务费怎么做账
  • 企业所得税汇算清缴申报表
  • 税费返还如何处理
  • 房租转租怎么处理合法
  • 公司章程上的出资时间2050年
  • 哪些发票可以用ppt
  • 为什么债务利息不计入资本预算的范畴
  • 房地产开发企业资质管理规定
  • 所得税补缴自查需要缴纳什么
  • 土地出让金缴纳契税计税依据
  • 收到管理费用的会计科目
  • 销售折扣与折让影响应收账款周转率吗
  • 分支机构能否核定企业所得税
  • 收到质量赔偿款从总账做账可以
  • 公司基本户买理财产品,怎么记账
  • 进口货物的企业有哪些
  • 如何使用快捷键截屏电脑
  • 苹果Mac电脑怎么锁屏
  • 购买办公用品是否缴纳印花税
  • 预付款挂账什么意思
  • 会计中记账凭证的名词解释
  • 摊销房租费如何做账
  • 电脑找不到Realtek
  • 屏幕颜色怎么变
  • linux常见的文本编辑工具有哪些
  • 处理车辆违章送什么证件
  • 在建工程如何转为成本费用
  • PHP:session_set_save_handler()的用法_Session函数
  • php json
  • PHP:image_type_to_extension()的用法_GD库图像处理函数
  • 取得企业债券利息为什么要交个人所得税
  • phpstorm怎么样
  • 银行存款日记账对方科目写什么
  • yii框架安装
  • 物流公司交保险是骗局吗
  • 以小物件为话题写出背后的故事
  • 广告宣传制作
  • 关联广告是什么意思
  • 建筑总承包分包单位可以是市政总承包吗
  • 什么情况下计入库存商品
  • 进项税额的作用
  • 三票合一的发票什么意思
  • 关税完税价格如何计算消费税
  • 已经确认收入的商品发生销售折让
  • 个贷系统平账专户A户付款会计分录
  • 营业外收入是损益类账户吗
  • 检测费用的会计分录
  • 年度汇算清缴缴税的会计分录
  • 土地拍卖相关法律法规
  • 房租押金是什么意思?
  • 营业成本年末怎么结转
  • 实际开票金额比外经证金额大
  • 普通发票做帐有什么用
  • 数据库sql server
  • linux 追踪
  • win7注册表详解
  • window 8
  • win系统开发
  • windows8.1安装windows7
  • win8.1无线网
  • windows7默认网关不可用
  • javascript中的this
  • portainer集群管理
  • jquery 选中
  • 压缩的linux命令
  • python 获取网页上文件地址
  • unity-x
  • 工会经费税务代收
  • 土地重置成本价
  • 国税总局云南省税务局官网
  • 北京的个人所得税怎么算
  • 申请农合减免
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设