recycleviewitem 列表加载动画_用vue实现一个虚拟列表

f293072b6e21fadaa671f32c93f58929.png

上次分享了超长列表分片加载的方式,这种方式现在一般不会使用,因为dom会变的无比庞大,页面会很卡,今天分享用vue实现一个虚拟列表的简易实现,本来是想用原生实现一个,后来觉得直接使用computed,简单一些。

思路就是用vue的for循环渲染列表,自己手动加一个滚动条,然后通过监听scroll,算出应该显示到第几个,通过计算属性截取显示的数据,直接上代码: 

<html lang="en"><head>    <meta charset="UTF-8">    <title>Titletitle>    <style>        .list-wrap{            position: relative;            overflow-y: scroll;            width: 200px;            margin: 100px auto;            box-sizing: border-box;            border: solid 1px red;        }        .list{            position: absolute;            top: 0;            left: 0;        }        .list li{            border: solid 1px blue;            line-height: 30px;        }style>head><body><ul id="app">    <div class="list-wrap" ref="listWrap" @scroll="scrollListener">        <div class="scroll-bar" ref="scrollBar">div>        <ul class="list" ref="list">            <li v-for="val in showList">{{val}}li>        ul>    div>ul><script src="../../js/vue.js">script><script>    new Vue({        el: '#app',        data(){            return {                list: [],//超长的显示数据                itemHeight: 30,//每一列的高度                showNum: 10,//显示几条数据                start: 0,//滚动过程显示的开始索引                end: 10,//滚动过程显示的结束索引            }        },        computed: {            //显示的数组,用计算属性计算            showList(){                return this.list.slice(this.start, this.end);            }        },        mounted(){            //构造一个超长列表            for (let i = 0; i < 1000000; i++) {                this.list.push('列表' + i)            }            //计算滚动容器高度            this.$refs.listWrap.style.height = this.itemHeight * this.showNum + 'px';            //计算总的数据需要的高度,构造滚动条高度            this.$refs.scrollBar.style.height = this.itemHeight * this.list.length + 'px';        },        methods: {            scrollListener(){                //获取滚动高度                let scrollTop = this.$refs.listWrap.scrollTop;                //开始的数组索引                this.start = Math.floor(scrollTop / this.itemHeight);                //结束索引                this.end = this.start + this.showNum;                //绝对定位对相对定位的偏移量                this.$refs.list.style.top = this.start * this.itemHeight + 'px';            }        }    })script>body>html>

看效果:

01876a5d8db0a48f5e00bc19846f9986.gif 

其实原理很简单,把代码跑起来,输出看看这些数据就很容易就搞懂虚拟列表的实现了。但这只是实现,要想做的更好就很难了。比如可以前后多添加几条数据,像swiper样,然后滚动的过程加一些小的过渡动画,让页面滑动过程柔顺一些,还有,做个节流还是很有必要的。要是想做高度不固定的,那就更难了,要缓存每个列表的高度,然后用一些算法去计算滚动过程的高度。

最后祝大家六一快乐!!!

(可添加好友共同进步)

Coding 个人笔记

ec4eade142f5526c37677b8e4820ebc1.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/501483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决为什么JDK要带着JRE一起下载

相信在安装的过程中会遇到这么一个疑问&#xff0c;明明我安装的的是JDK&#xff0c;为什么下载完成后路径里面多了一个jre呢&#xff1f; 带着这个疑问&#xff0c;我们探究一下JDK和JRE的区别 JDK&#xff1a;它是Java开发运行环境&#xff0c;在程序员的电脑上当然要安装J…

linux 安装jdk gz文件,Linux 安装jdk gz 安装方式

Linux安装JDK步骤1、先从网上下载jdk(jdk-7u1-linux-i586.rpm)&#xff0c;下载地址:http://www.Oracle.com/technetwork/Java/javase/downloads/jdk-7u1-download-513651.html&#xff0c;下载后放在/home目录中&#xff0c;当然其它地方也行。2、进入安装目录#cd /home#cp jd…

多元相关性分析_研究 | 精神分裂症症状与超氧化物歧化酶相关性的性别差异

精神分裂症是一种精神病综合征&#xff0c;主要症状包括阳性症状(如幻觉、妄想以及言语混乱)&#xff0c;阴性症状(如积极性降低、表达能力下降)&#xff0c;认知缺陷(如执行功能、记忆能力和心理处理速度受损)。氧化应激过度、抗氧化防御系统失调被认为是精神分裂症的重要危险…

安装Android studio打不开,提示the environment variable HAVA_HOME does not point to a val

遇到问题先仔细看错误提示&#xff0c;这里的意思有提到JAVA_HOME&#xff0c;因此需要我们打开一下系统的环境变量 1.java_home里面只有一个值&#xff0c;但在后面加了分号&#xff1a; 运行Java程序的时候不会报错。但是Android studio会认为不是一个正确的地址。 2.盘符问…

linux system更好方法,Linux将程序添加到服务的方法(通用【但最好还是用systemd】)...

一&#xff1a;咱们通过这篇文章来演示怎么将某个程序作为服务(就类似Windows服务可以开机自动启动)&#xff0c;这里以tomcat为例&#xff0c;已经亲测过&#xff1b;二&#xff1a;步骤(最好用root用户来做这种事情&#xff0c;切换root用户记得su - root)1)在/etc/rc.d/init…

获取显示器的唯一编号_宝马奔驰才配拥有的HUD抬头显示器,买菜车也能无损安装!...

其实现在许多中高端车(壕车)已经开始标配或者可以选配抬头显示器&#xff0c;比如宝马现在全系好像都可以选配&#xff0c;我朋友有一台X3就带HUD&#xff0c;听说选配HUD时追加了1.3万。那HUD有什么作用呢&#xff1f;没用过的人可能会说装X大于实用&#xff0c;其实真正用过H…

JAVA入门级教学之(Object类中的equals方法)

package com.lbj.javase18; /** * 关于Object中的equals方法&#xff1a; * * Object中的equals方法(核心)&#xff1a; * public boolean equals(o2){ * return(thisobj);//相当于return(o1o2);中间跟的是双等号&#xff0c;两边引用地址内存相同则true&#xff0c…

g100显卡 linux驱动,nvidia geforce g100驱动

这是nvidia geforce g100驱动下载&#xff0c;一款可以有效解决NVIDIA GeForce G100显卡在使用过程中出现的一些问题的驱动工具&#xff0c;本站提供了NVIDIA GeForce G100显卡驱动的下载地址&#xff0c;有兴趣的朋友们可以前来下载使用。软件说明1、支持GeForce GTS 240、GT …

eclipse 64位_如何安装调试 Java开发工具Eclipse和JDK环境

JRE是个运行环境&#xff0c;JDK是个开发环境。因此写Java程序的时候需要JDK&#xff0c;而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE&#xff0c;因此只要安装了JDK&#xff0c;就可以编辑Java程序&#xff0c;也可以正常运行Java程序。但由于JDK包含了许多与运行…

计算机操作系统超全详解

操作系统详解 一 为什么要有操作系统 &#xff08;两本书&#xff1a;现代操作系统、操作系统原理&#xff0c;学好python以后再去研究吧~~&#xff09; 现代的计算机系统主要是由一个或者多个处理器&#xff0c;主存&#xff0c;硬盘&#xff0c;键盘&#xff0c;鼠标&#…

mooc哈尔滨c语言作业答案,哈尔滨工业大学C语言2016年MOOC在线测试答案.doc

哈尔滨工业大学C语言2016年MOOC在线测试答案本答案仅供参考&#xff0c;请勿用于商业用途或进行未经同意的转载第3周1计算两个数的平方和(3分)题目内容&#xff1a;从键盘读入两个实数&#xff0c;编程计算并输出它们的平方和&#xff0c;要求使用数学函数pow(x,y)计算平方值&a…

python画指数函数图像_python实现画出e指数函数的图像

这里用Python逼近函数y exp(x);同样使用泰勒函数去逼近: exp(x) 1 x (x)^2/(2!) .. (x)^n/(n!) ... #!/usr/bin/python # -*- coding:utf-8 -*- import numpy as np import math import matplotlib as mpl import matplotlib.pyplot as plt def calc_e_small(x): n 10 …

JAVA入门级教学之(静态内部类)

package com.lbj.javase19; /** * 关于静态内部类&#xff1a; * * 1.静态内部类可以等同看做静态变量 * * 内部类重要的作用&#xff1a;可以直接访问外部类中私有的数据 * * 2.静态内部类可以直接访问外部类的静态数据&#xff0c;无法访问成员…

python怎么写入到文件中_Python学习笔记之将数据写入到文件中

原博文 2019-10-29 16:04 − 10-3 访客&#xff1a;编写一个程序&#xff0c;提示用户输入其名字&#xff1b;用户作出响应后&#xff0c;将其名字写入到文件guest.txt 中。 编写Python代码&#xff1a; 1 username input("Please enter your name: ") 2 filename …

c语言编写两个矩阵的乘积,如何用c语言编写两个模糊矩阵相乘的程序?

满意答案有三处&#xff0c;你仔细看一下#define M 4#includefloat min(float x,float y){return(x};float max(float*p,int n){float m*p;int i;for(i0;iif(*(pi)>m)m*(pi);return(m);}void main(){float a[M][M],b[M][M],c[M],d[M][M];int i,j;printf("请输入矩阵a:&…

JAVA入门级教学之(成员内部类)

package com.lbj.javase20; /** * 关于成员内部类&#xff1a; * * 1.成员内部类可以等同看做成员变量 * * 内部类重要的作用&#xff1a;可以直接访问外部类中私有的数据 * * 2.成员内部类中不能有静态声明和静态变量、静态方法。 * * …

c语言计算平方根编程程序,一个用C语言计算平方根的巧妙算法

#include void main(){int w,i;double ss;double x, y;printf("enter the number!\n");scanf("%lf",&y); /* 输入浮点型数据Y&#xff0c;即我们要求平方根的方程 */xy; /* 这里把Y赋给X是想把Y的值先保存下来 */ss1.0;for(w0;x>1;w){xx/10;} /* 把…

python 文本相似度_python实现余弦相似度文本比较

向量空间模型VSM&#xff1a; VSM的介绍&#xff1a; 一个文档可以由文档中的一系列关键词组成&#xff0c;而VSM则是用这些关键词的向量组成一篇文档&#xff0c;其中的每个分量代表词项在文档中的相对重要性。 VSM的例子&#xff1a; 比如说&#xff0c;一个文档有分词和去停…

python环境配置opencv_Python 3.5.1和Opencv 3.1的环境配置

1 在以下网站下载Python程序&#xff1a; https://www.python.org/ftp/python/3.5.1/python-3.5.1-amd64.exe 这里选择3.5.1版本2 下载后按照默认安装。 然后安装Numpy模块。 按WinR输入CMD&#xff0c;进入安装目录下的Lib\site-packages子目录&#xff0c;在联网状态下输入pi…

毕业C语言专业专业现状,C语言程序设计教学现状与课程优化及改革措施论文

C语言程序设计教学现状与课程优化及改革措施论文随着计算机技术的飞速发展和不断普及&#xff0c;计算机已经走进各行各业&#xff0c;与人们的生活息息相关&#xff0c;对计算机知识的掌握成为当前高校的教学目标。C语言兼有汇编语言和高级语言的双重优点&#xff0c;运用它既…