用vue实现虚拟列表

数据量大如何优化渲染、虚拟列表技术、js虚拟列表、Vue Virtual Scroller 实现虚拟滚动列表、react-virtualized 库实现的虚拟列表 当处理大量数据时,页面可能会出现性能问题。为了优化性能,可以考虑使用虚拟列表和数据缓存机制。 虚拟列表是一种UI优化技术,它只渲染可见区域的数据项,而不是一次性渲染全部数据。这样可以减少DOM元素数量,提高页面性能和用户体验。 阅读详情

把以下代码拷贝放到html文件中即可查看效果
vue.js 文件需要自己引入

<!doctype html>
<html lang="zh">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>虚拟列表</title>
  <style>
    .container {
      width: 300px;
      height: 370px;
      overflow: auto;
      border: 1px solid;
      margin: 100px auto;
    }

    .item {
      height: 39px;
      line-height: 30px;
      border-bottom: 1px solid #aaa;
      padding-left: 20px;
    }
  </style>
</head>

<body>
  <div id="app">
    <button @click="add">增加</button>
    <div class="container" ref="container">
      <div class="scroll-wrapper" :style="style">
        <div v-for="(item, index) in scrollList" :key="index" class="item">{{item}}</div>
      </div>
    </div>
  </div>
  <!-- vue自行引入 -->
  <script src="../vue.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        list: [],
        itemLen: 40, //每一项高度
        startIndex: 0,
        endIndex: 0,
        paddingTop: 0,
        paddingBottom: 0,
        allHeight: 0, //所有数据的高度
      },
      computed: {
        scrollList() {
          //截取要展示的数据
          return this.list.slice(this.startIndex, this.endIndex)
        },
        style() {
          //获取内容体的上下padding
          return {
            paddingTop: this.paddingTop + 'px',
            paddingBottom: this.paddingBottom + 'px'
          }
        }
      },
      mounted() {
        const needLen = Math.ceil(370 / this.itemLen) + 1;
        this.endIndex = needLen;
        this.add();
        const container = this.$refs.container;
        this.timer = null;
        //利用外层div的高度 和 每一项的高度,获取可视区域需要展示的数据条数
        container.addEventListener('scroll', () => {
          //防抖
          if (this.timer) {
            clearTimeout(this.timer);
          }
          this.timer = setTimeout(() => {
            const top = container.scrollTop;
            console.log(top);
            //当列表滚动到任何一个位置,利用滚动条距离顶部的值算出需要展示数据的起止位置
            this.startIndex = Math.floor(top / this.itemLen)
            this.endIndex = this.startIndex + needLen;

            //重新设置上下边距
            this.paddingTop = this.startIndex * this.itemLen;
            if (this.list.length >= this.endIndex) {
              this.paddingBottom = (this.list.length - this.endIndex) * this.itemLen;
            } else {
              this.paddingBottom = 0;
            }
          }, 20);
        })
      },
      methods: {
        add() {
          let arr = new Array(30).fill(0)
          let basis = this.list.length;
          arr = arr.map((item, index) => {
            return index + 1 + basis
          })
          this.list = [
            ...this.list,
            ...arr
          ];
          //插入数据,重新设置下边距
          const valLen = this.list.length
          this.allHeight = valLen * this.itemLen
          this.paddingBottom = this.allHeight - this.endIndex * this.itemLen
        }
      }
    })
  </script>
</body>

</html>
手把手教你为STM32设备生成自定义MAC地址(基于芯片ID的5种算法对比) 本文详细介绍了基于STM32芯片ID生成自定义MAC地址的5种算法,包括直接截取、异或折叠、CRC32哈希、自定义混合运算及SHA-256摘要。通过对比分析各算法的计算复杂度、唯一性及适用场景,帮助嵌入式开发者根据项目规模与资源,选择最合适的方案,确保设备MAC地址的唯一性与合规性。 阅读详情

相关推荐

操作系统原理:【优麒麟】linux内核添加系统调用

在底端添加如下代码。

Joyce_zz的博客 2709

vue-虚拟列表

前端业务会涉及到数据量很大的且无法用分页进行加载的列表,我们一般叫做长列表,完整的渲染长列表基本上很难达到业务的上的要求,非完整渲染长列表一般分为两种:1.懒渲染:这个就是常见的无线滚动的,每次只渲染一部分(比如10条),等剩余部分滚到可见区域,就再渲染一部分。2.可视区域渲染:只渲染可见部分,不可见部分不渲染。

qq_53776079的博客 3505

DRAM自测试模块

1 背景技术DDR3/4 SDRAM属于高速外设,最高时钟频率可达到1600MHz,最高速率可达3200MT/s。在存储控制器与DDR34 SDRAM设备之间有一层专为高速接口设计的模拟电路,此电路对于前端设计人员来说,不管在模拟验证阶段和回片测试阶段,都是一个黑盒子。而对于后端测试人员来说若此部分为外购IP,则内部结构也是无法清楚了解的。所以在测试阶段,对于DDR34 SDRAM的测试就具有一定的

Hierro的DDR世界 7014

虚拟列表的实现

1)数据初始化,data用来存储传进来的数据,这里我们自己使用随机函数生成高度数据,数组computedData是辅助数组,里面到i元素(包括自身)的累加高度,之后会用来修正高度,计算content(dom元素)该translate的距离。盗用一张很经典的图,我们用数组保存要渲染的数据,同时监听鼠标滚动事件,获取滚动的距离,通过相关计算我们计算出滚动距离下对应的数组对应的渲染的开始索引和结束索引,用slice方法截取出来得到新数组,把新数组渲染到页面。另外,需要注意的是,懒加载和虚拟列表也是有。

qq_58355643的博客 4621

schrodinger 薛定谔

链接: https://pan.baidu.com/s/1Duh4GsoytIklvZp7TdHpWg 密码: wmr1 Linux系统版 进入 Schrodinger_Suites_2021-2_Linux-x86_64 sudo ./INSTALL 中间按默认的来即可,也可以自己调整安装目录。安装目录一定要记住。 安装完,把patcher 拷贝到安装目录 sudo ./patcher 点击Patch即可。 启动程序,进入安装目录 ./maestro ...

周迪新的博客 1万+

Verilog基本代码结构及常用语句always、begin...end解读

Verilog基本代码结构及常用语句always、begin...end解读 线性反馈以为寄存器(LFSR)

weixin_62380586的博客 1万+

vue中实现虚拟列表

Vue中实现虚拟列表

weixin_38881784的博客 2668

2025数学建模美赛C题完整建模思路——奥运会奖牌榜的模型

2025数学建模美赛C题完整建模思路——奥运会奖牌榜的模型

Yilu264的博客 1万+

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

vue长列表优化之虚拟列表实现 应用场景:后台一次性发送上千条或更多数据给前台 场景模拟:用户发起一个请求,后台发送了10w条数据 使用虚拟列表之前:前台需要生成10w个dom节点用来渲染页面 使用虚拟列表之后:前台只需要生成少量dom节点(dom节点数量取决于前端视图需要展示的数量),就可以实现对这10w条数据的视图渲染 总之:虚拟列表就是固定dom节点数量,通过修改dom节点的内容而达到不重新增加(或删除)dom节点来实现列表的更新 1.实现原理 监听页面滚动,获取滚动的高度scrolltop 根据

zzming的博客 1万+

AURIX TC397开发板到手第一步:用iLLD库驱动LED流水灯(附完整代码)

本文详细介绍了如何使用英飞凌AURIX TC397开发板和iLLD库实现LED流水灯效果。从开发环境配置到硬件连接,再到完整的代码实现,逐步引导开发者完成项目。文章还提供了优化建议和常见问题解决方案,帮助嵌入式开发新手快速上手。

weixin_30911451的博客 390

A.特定领域知识图谱知识推理方案:知识图谱推理算法综述[五]-GeniePath会自动过滤多度“邻居“的图神经网络算法。

构图对于GNN格外重要。那么怎样构图才有信息、有意义呢?如果节点的邻居只有自己,即邻接矩阵为对角阵时,GNN会退化成一个DNN模型。图中每个节点都是孤立的,相当图信息并不能相比其他方法带来增益。如果图特别稠密,比如是一个clique,即每个节点都和所有其他节点有边连接。同样的,这样的图信息同样是信息熵为0。经验上讲,节点度分布有区分度的图是相对有价值的。查看图的节点度分布。比如二类分类,分析正负例的图拓扑当然,构图和实际场景强相关。

丨汀、的博客 437

【js】无限虚拟列表的原理及实现

虚拟列表是长列表按需显示思路的一种实现,即虚拟列表是一种根据滚动容器元素的可视区域来渲染长列表数据中某一个部分数据的技术。简而言之,虚拟列表指的就是「可视区域渲染」的列表。定义固定宽高的元素,该区域限制无限虚拟列表的可视区域大小宽高为父元素的100%,纵向超出可滚动宽度100%,高度auto,用于呈放渲染的部分列表项,撑开可滚动区域。

weixin_52418790的博客 5499

VisionPro - 基础 - 模板匹配技术-Search/PMAlign/PatMax(6)-纹理屏蔽和重叠匹配

Note:对已经有了,1已经训练好的模板,2一组使能的自由度,3一个待测的实时图片,PatMax 就能模板匹配的给出变化的最佳描述。对一些综合的模板,这三个输入值往往是一起影响最后的变换结果信息。例如,如果我们训练了一个圆形的模板,然后搜索一个角度自由度包括一个圆,那么将会有无限个可能的角度满足要求。这些组合的模板匹配,被官方名为:退化系统,a degenerate system的结果被叫做a degenerate result 退化结果4.2 退化系统例子。

山云的专栏 1534

vue实现虚拟列表

vue实现虚拟列表

喜大普奔 4287

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

用vue实现一个虚拟列表

上次分享了超长列表分片加载的方式,这种方式现在一般不会使用,因为dom会变的无比庞大,页面会很卡,今天分享用vue实现一个虚拟列表的简易实现,本来是想用原生实现一个,后来觉得直接使用computed,简单一些。 思路就是用vue的for循环渲染列表,自己手动加一个滚动条,然后通过监听scroll,算出应该显示到第几个,通过计算属性截取显示的数据,直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta char

wade3po的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

vue2 与 vue3 虚拟列表实现

文章目录1、概述2、计时3、JavaScript线程4、分片加载5、vue-virtual-scroll-list6、自己实现vue虚拟列表① vue2Ⅰ. 项目搭建Ⅱ. 虚拟列表制作② vue3Ⅰ. 项目搭建Ⅱ. 虚拟列表制作 1、概述 一般长列表用在后端传递大量数据,要求前端进行展示的情况 先来看看原生的一个加载大量数据的一个情况: <div id="container"></div> <script> // 演示大量 DOM 加载时的缓慢问题,也就是“

qq_45770253的博客 6578

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于vue2的虚拟列表的设计与实现

基于vue2的虚拟列表的设计与实现

xiaobangkeji的博客 1122

教你使用vue实现一个定高虚拟列表

虚拟列表对于大部分一线开发同学来说是一点都不陌生的东西了,有的同学是直接使用第三方组件。但是面试时如果你简历上面写了虚拟列表,却给面试官说是通过三方组件实现的,此时空气可能都凝固了。有的特殊场景我们不能分页,只能渲染一个长列表。这个长列表中可能有几万条数据,如果全部渲染到页面上用户的设备差点可能就会直接卡死了,这时我们就需要虚拟列表来解决问题。一个常见的虚拟列表是下面这样的,如下图:其中实线框的item表示在视口区域内真实渲染DOM,虚线框的item表示并没有渲染的DOM。

fans_x的博客 1054

Vue实现虚拟列表

Vue中的虚拟列表是一种渲染大量数据的优化方式。通常,渲染大量数据时,会出现页面卡顿的情况。虚拟列表通过仅渲染当前可见的数据来避免这种卡顿。虚拟列表的实现方式是将数据分成一个个可视区域,而非全部渲染。当用户滚动列表时,只有当前可见区域的数据被渲染。当用户滚动到列表的另一个区域时,虚拟列表会根据需要重新渲染可视区域的数据。虚拟列表的原理和使用方法就是这样。使用虚拟列表可以提高Vue应用程序的性能,让用户可以流畅地浏览大量数据。

weixin_69810763的博客 798

vue3实现虚拟列表

vue3.0发布了,刚好学习一下,仿照网上案例写了一个虚拟列表 <template> <div class='virtual' @scroll="scroll" :style="{height:400+'px'}"> {{itemHeight}} <div class="list" :style="{height:dataLengh*itemHeight+'px'}"> <ul :style="{'

dtbk123的博客 3449

Vue 实现虚拟列表

使用Vue实现虚拟列表无限滚动

qq_39085895的博客 550

怎么使用vue3实现一个优雅的不定高虚拟列表

很多同学将虚拟列表当做亮点写在简历上面,但是却不知道如何手写,那么这个就不是加分项而是减分项了。实际项目中更多的是不定高虚拟列表,这篇文章来教你不定高如何实现。不定高的意思很简单,就是不知道每一项item的具体高度,如下图:现在我们有个问题,在不定高的情况下我们就不能根据当前滚动条的scrollTop去计算可视区域里面实际渲染的第一个item的index位置,也就是start的值。没有start,那么就无法实现在滚动的时候只渲染可视区域的那几个item了。

fans_x的博客 1633

在Vue3中实现虚拟列表

当今的时代是大数据时代,往往一个列表就有成千上万条数据,而我们一一渲染的话,则需要耗费大量时间,导致网页打开缓慢。懒加载虽然减少了第一次渲染时间,加快了网页打开速度,但随着后续数据的不断载入拼接,列表的渲染时间也会越来越长。虚拟列表则很好的解决了这一问题。虚拟列表只渲染当前可视区域的列表,并不会将所有的数据渲染。以下以一个自制记账本(account book)为例。

qq_52013792的博客 3087

给我2分钟,保证教会你在Vue3中实现一个定高的虚拟列表

所以我们可以在可视区域container中新建一个名为placeholder的空div,将他的高度设置为itemSize * listData.length,这样可视区域就被撑开了,并且滚动条也有了。所以此时的start的值就应该从0更新为1,同理如果scrollTop的值为110,start的值也一样是1。有的特殊场景我们不能分页,只能渲染一个长列表。因为在滚动时如果是在item的高度范围内滚动,我们是复用浏览器的滚动,此时无需进行偏移,所以计算偏移值时需要减去scrollTop % itemSize。

weixin_55010563的博客 831

swiper vue 上一页_用vue实现一个虚拟列表

上次分享了超长列表分片加载的方式,这种方式现在一般不会使用,因为dom会变的无比庞大,页面会很卡,今天分享用vue实现一个虚拟列表的简易实现,本来是想用原生实现一个,后来觉得直接使用computed,简单一些。思路就是用vue的for循环渲染列表,自己手动加一个滚动条,然后通过监听scroll,算出应该显示到第几个,通过计算属性截取显示的数据,直接上代码: <!DOCTYPE html&gt...

weixin_39692253的博客 485

Vue3 实现列表虚拟滚动

近期在做一个网页播放器项目中,用到很多需要展示歌单的列表。 一个歌单动辄三五百首歌曲,页面中的元素太多导致热重载的时候 chrome 直接崩了 😢。 于是无限滚动列表提上日程。写的有点乱,也是第一次用 typescript 写项目,先记录一下。

qq_15971559的博客 1997
上一篇: npm 发布vue插件并使用
下一篇: 利用webpack的插件 webpack-bundle-analyzer 生成代码分析报告
haogemr
博客等级 码龄9年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值