uniapp封装虚拟列表滚动组件

uniapp封装虚拟列表滚动组件

这里用到一个列表,然后数据可能有很多很多…,一次性全部渲染到dom上会卡顿,很废性能,于是用了这个虚拟列表就变丝滑很多很多。

在这里插入图片描述

组件mosoweInventedList 代码:

<!-- 虚拟滚动列表组件:mosoweInventedList -->
<template><view class="mosowe-invented-list"><scroll-view class="container" scroll-y :style="{ height: boxHeight + 'px' }" @scroll="handleScroll"><div class="mosowe-invented-wrap" :style="{ height: itemHeight * list.length + 'px' }"><div class="mosowe-invented-content" :style="{ transform: 'translateY(' + offsetY + 'px)' }"><view class="mosowe-invented-item" v-for="(item, index) in showList" :key="index"><slot :item="item"></slot></view></div></div></scroll-view></view>
</template><script>export default {props: {list: {type: Array,default: () => []},cacheNum: {// 前后缓存数目type: Number,default: 10}},data() {return {showList: [], // 展示的数据列表boxHeight: 0, // 组件可视区高度itemHeight: 0, // 每条数据高度,计算第一条数据的高度,以第一条数据高度为主offsetY: 0};},computed: {pageNum() {if (this.boxHeight && this.itemHeight) {return Math.ceil(this.boxHeight / this.itemHeight) + this.cacheNum;} else {return this.cacheNum;}}},watch: {pageNum() {this.setShowList(0);},list: {handler() {this.init();},deep: true,immediate: true}},mounted() {this.init();},methods: {init() {this.$nextTick(() => {this.setShowList(0);let t = setTimeout(() => {clearTimeout(t);t = null;const query = uni.createSelectorQuery().in(this);query.select('.mosowe-invented-list').boundingClientRect((res) => {this.boxHeight = Math.floor(res?.height) || 0;}).select('.mosowe-invented-item').boundingClientRect((res) => {this.itemHeight = Math.floor(res?.height) || 0;}).exec();}, 100);});},handleScroll(e) {const scrollTop = Math.floor(e.detail.scrollTop);this.offsetY = scrollTop - (scrollTop % this.itemHeight);let startIndex = Math.floor(scrollTop / this.itemHeight);if (startIndex > this.cacheNum) {this.offsetY -= this.cacheNum * this.itemHeight;startIndex = startIndex - this.cacheNum;}this.setShowList(startIndex);this.$emit('scroll', scrollTop);},setShowList(startIndex) {this.showList = this.list.slice(startIndex, startIndex + this.pageNum);}}};
</script><style lang="scss" scoped>.mosowe-invented-list {overflow: hidden;height: 100%;width: 100%;.container {width: 100%;height: 100%;}}
</style>

使用:

<template><view class="centent"><mosoweInventedList :list="listData" :cacheNum="20"><template #default="{ item }"><view class="item"><view class="list"><view class="col title"><image class="mark" src="@/static/images/layout/rectangle_9.png" mode=""></image>{{ item.yhmc }}</view><view class="col area"><u-count-to fontSize="9rpx" style="color: #2EC38E;" class="unm" :endVal="item.mj"separator=","></u-count-to><text class="unit">k㎡</text></view><view class="col time">{{ item.jmrq }}</view></view><u-divider text=""></u-divider></view></template></mosoweInventedList></view>
</template>

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

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

相关文章

BASH and SH in SHELL scripts

一、执行脚本的现象 为了测试一个小的功能&#xff0c;写了一个小脚本&#xff0c;类似的内容如下&#xff1a; #!/bin/shecho "start api test ......"for((i1;i<10;i)); do echo "cur id :" $i; done echo "end."执行一下&#xff0c;“…

代码随想录Day67(图论 part04)

110.字符串接龙 题目&#xff1a;110. 字符串接龙 (kamacoder.com) 思路&#xff1a;没有思路 答案 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();String beginStr sc…

华为手机怎么打印文件?

关于华为手机打印的问题&#xff0c;如果您有打印机&#xff0c;并且已经成功和华为手机相连&#xff0c;在解决上就要容易很多。 具体操作如下&#xff1a; 选择文件 文件来源&#xff1a;华为手机上的文件可以来自多个应用&#xff0c;如图库、备忘录、文件管理等&#xf…

20240628模拟赛总结

cf好了 让我们开始 T1 Two Regular Polygons 判断能不能构造出题中要求的正多边形 关键是n%m0 Two Regular Polygons #include<bits/stdc.h> using namespace std; int t; int n,m; int main() {cin>>t;for(int i1;i<t;i){cin>>n>>m;if(n%m0)co…

C++与C#创建位图,是否需要区分RGB和BGR模式

在处理位图时&#xff0c;确实需要区分RGB和BGR模式&#xff0c;因为不同的库和API对颜色通道的排序有不同的约定。具体到C与C#&#xff0c;这一点也是需要注意的。 C 创建位图 使用GDI或WIC (Windows Imaging Component): 当你在C中使用这些Windows API创建或操作位图时&…

MySQL——事务ACID原则、脏读、不可重复读、幻读

什么是事务 要么都成功&#xff0c;要么都失败 一一一一一一一 1. SQL执行&#xff1a;A给B转账 A 1000 ---->200 B 200 2. SQL执行&#xff1a;B收到A的钱 A 800 B 400 一一一一一一一 将一组SQL放在一个批次中去执行~ 事务原则&#xff1a;ACI…

学习笔记(linux高级编程)10

IPC 进程间通信 interprocess communicate 三大类&#xff1a; 1、古老的通信方式 无名管道 有名管道 信号 2、IPC对象通信 system v BSD suse fedora kernel.org 消息队列(用的相对少&#xff0c;这里不讨论) 共享内存 信号量集 3、socket通信 网络通信 特…

Qt | Qt6.5.3创建一个安卓APP并发布到真机

01、重点知识公布 【1】Qt | windows Qt6.5.3安装&安卓环境搭建&虚拟机调试和真机调试完美版(保姆级教程)VS2022 配置Qt编译环境 | winows安装Qt5.14.2 | VS2017和Qt5配置成功指南

TF/IDF算法

第1关&#xff1a;去除停用词 任务描述 本关任务&#xff1a;根据本关所学有关停用词的知识&#xff0c;编写使用停用词表去除停用词的程序并通过测试用例。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 停用词的意义&#xff1b; 去除停用词的步骤。 …

手机注册卡知多少

顾名思义&#xff0c;手机注册卡也是一种手机卡&#xff0c;只是这种手机卡没有套餐&#xff0c;没有流量&#xff0c;只能用来接收短信。 因为只能接收短信&#xff0c;所以大家可以用来注册各种APP和会员账户&#xff0c;一方面进行薅羊毛&#xff0c;另一方面可以进行自媒体…

浅谈Web性能测试(原创)

一、性能测试不是什么高技术的活&#xff1a; 说到性能测试&#xff0c;很多工作时间较短的新同事或者应届生就很害怕。 为什么害怕&#xff0c;因为感觉无从下手&#xff0c;不知道该做什么、怎么做、做到什么程度&#xff1f; 一听性能测试首先想到的是各种专业的性能测试…

ThingsKit物联网平台功能解析

随着物联网技术的飞速发展&#xff0c;各种物联网平台应运而生&#xff0c;为设备管理和数据集成提供了强大的支持。ThingsKit物联网平台以其全面的功能和灵活的配置&#xff0c;成为行业中的一大亮点。本文将详细解析ThingsKit物联网平台的功能清单&#xff0c;带您深入了解该…

「前端工具」postman接口测试工具详解

Postman 是一款流行的 API 开发工具,用于构建和测试 RESTful API。以下是 Postman 的一些关键特性和使用方法的详解: 1. 界面和基本操作 工作区:Postman 的主界面,用于显示集合、环境和全局变量。请求构建器:用于输入请求的 URL、HTTP 方法、请求头、请求体等。响应区:显…

Java面试题:覆盖索引和超大分页优化

覆盖索引和超大分页优化 覆盖索引 覆盖索引:查询使用了索引,且需要返回的列在索引中全部能找到 根据主键查询的sql语句必然是覆盖索引: 主键为聚集索引,索引中包含所有数据 非聚集索引中包含主键,所以查询二级索引和对应主键的查询语句也是覆盖索引 非覆盖索引:需要回表查…

oracle数据库默认表空间详解

文章目录 oracle数据库默认表空间列表 oracle数据库默认表空间列表 系统表空间&#xff08;System Tablespace&#xff09; 系统表空间包含了系统级别的元数据&#xff0c;如数据字典、系统表和存储过程等。例如SYSTEM表空间用于保存数据库的数据字典、PL/SQL程序的源代码和解释…

【C语言】分支(选择)和循环语句

目录 简述选择语句简述if语句单if结构语法格式 if-else结构语法结构 语法结构 循环结构break和continuewhile循环语法结构 for循环语法结构 do while循环语法结构 简述 在c语言中分支和循环语句是极其重要的&#xff0c;就像生活中你难免要做一些判断和循环往复做一些事。 选…

高薪程序员必修课-java并发编程的bug源头

前言 Java并发编程虽然强大&#xff0c;但也容易引发复杂的bug。并发编程的bug主要源自以下几个方面&#xff1a;竞态条件、死锁、内存可见性问题和线程饥饿。了解这些bug的源头及其原理&#xff0c;可以帮助开发者避免和解决这些问题。以下是详细的讲解和相应的示例。 1. 竞态…

SpringBoot 中的参数校验:构建健壮应用的基石

前言 在开发Web应用时&#xff0c;处理用户输入是不可避免的一环。然而&#xff0c;用户输入往往充满不确定性&#xff0c;可能是格式不正确、类型不匹配&#xff0c;甚至包含恶意内容。为了确保应用的稳定性和安全性&#xff0c;对输入参数进行有效校验显得尤为重要。Spring …

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备&#xff0c;适用于在恶劣环境下进行数据采集、运营管理和现场操作。 随着新能源技术的快速发展&#xff0c;工业平板电脑不断地得到应用&#xff0c;并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑…