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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

常见VPS主机术语有哪些?VPS术语解析

常见VPS主机术语有哪些&#xff1f;本期为大家解析一下我们常见到的听到的VPS专业术语&#xff0c;帮助大家更轻松的了解VPS主机相关知识。 常见VPS主机术语 Apache – 世界上最流行的 Web 服务器软件。 CentOS – 旨在提供基于 Red Hat Enterprise Linux 的企业级操作系统的…

常微分方程算法之编程示例七-两点混合边值问题(打靶法)

目录 一、研究问题 二、C++代码 三、计算结果 一、研究问题 本节我们采用打靶法求解两点混合边值问题,打靶法的原理及推导思路请参考: 常微分方程算法之“两点边值问题”求解-CSDN博客https://blog.csdn.net/L_peanut/article/details/137449287 研究问题为

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

void pthread_cleanup_push(void (*routine)(void *)&#xff0c; void *arg); 功能&#xff1a;注册一个线程清理函数 参数&#xff0c;routine&#xff0c;线程清理函数的入口 arg&#xff0c;清理函数的参数。 返回值&#xff0c;无 void pthread_cleanup_pop(int execute)…

Node.js学习(一)

Node.js安装与入门案例&#xff1a; 需求&#xff1a;点击按钮&#xff0c;请求本地目录指定文件的内容&#xff0c;并显示在页面上 刚入门肯定想着直接写相对路径请求指定路径数据就行了&#xff0c;可是会发现不行。 网页运行在浏览器端&#xff0c;通常后续要发布&#xf…

大模型应用开发实战基础

大模型应用开发实战基础 1. 背景 大模型如日中天&#xff0c;各行各业都受它影响&#xff0c;但是作为程序员&#xff0c;除了让它翻译代码不知道用它干什么&#xff0c;就像是拿着锤子的木匠&#xff0c;找不到钉子在哪。一边听着别人说2024是AI元年&#xff0c;一边又不知所…

数组-二分查找

二分查找 leetcode704 /*** param {number[]} nums* param {number} target* return {number}*/ var search function(nums, target) {let left 0, right nums.length - 1;while (left < right) {const mid Math.floor((right - left) / 2) left;const num nums[mid]…

【antd + vue】表格行合并,同时使用插槽

一、需求说明 表格中&#xff0c;如果一个学校有多个考试科目&#xff0c;则分行展示&#xff0c;其余列&#xff0c;则合并为一行展示&#xff0c;如图所示 二、需求分析 1、表格行合并 相当于有4行&#xff0c;其中1、2行是同一个学校包含不同考试科目及对应人次的数据&am…

生成式AI赋能金融信贷:减少信用评分偏差

信用评分在确定谁获得信贷以及以何种条件获得信贷方面发挥着关键作用。然而&#xff0c;尽管这一点很重要&#xff0c;但传统的信用评分系统长期以来一直受到一系列关键问题的困扰——从偏见和歧视&#xff0c;到有限的数据考虑和可扩展性挑战。例如&#xff0c;一项针对美国贷…

1:25万基础电子地图(西藏版)

我们为你分享过四川版、云南版、江西版、贵州版、重庆版和青海版的1比25万基础电子地图&#xff0c;现在再为你分享西藏版的电子地图。 如果你需要西藏版的1比25万基础电子地图&#xff0c;你可以在文末查看该数据的领取方法。 基础电子地图西藏版 西藏版1:25万基础电子地图…

Xilinx FPGA:vivado利用单端RAM/串口传输数据实现自定义私有协议

一、项目要求 实现自定义私有协议&#xff0c;如&#xff1a;pc端产生数据&#xff1a;02 56 38 &#xff0c;“02”代表要发送数据的个数&#xff0c;“56”“38”需要写进RAM中。当按键信号到来时&#xff0c;将“56”“38”读出返回给PC端。 二、信号流向图 三、状态…

FVCOM水环境、污染物迁移、水交换、水质、潮流、温盐、波浪及泥沙数值模拟

原文链接&#xff1a;FVCOM水环境、污染物迁移、水交换、水质、潮流、温盐、波浪及泥沙数值模拟https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247607618&idx2&sn5132fb8bfcbd02c2be308f6c6304c6d2&chksmfa8264a5cdf5edb3226d1b0597bb6c39f867601b961b…

[开源软件] 支持链接汇总

“Common rules: 1- If the repo is on github, the support/bug link is also on the github with issues”" label; 2- Could ask questions by email list;" 3rd party software support link Note gcc https://gcc.gnu.org openssh https://bugzilla.mindrot.o…

Web3 ETF 的软件开发框架

Web3 ETF 的软件开发框架主要包含以下几个方面&#xff0c;需要说明的是&#xff0c;Web3 ETF 仍处于早期发展阶段&#xff0c;相关技术和标准尚未成熟。在开发 Web3 ETF 时&#xff0c;需要谨慎评估风险&#xff0c;并做好安全防范措施。北京木奇移动技术有限公司&#xff0c;…

解决卡顿发热,超帧技术焕发中重载游戏动力

近几年&#xff0c;中国手游市场规模不断扩大&#xff0c;开发者通过在画面、玩法等方面的持续创新和打磨&#xff0c;推出更加精品化的产品。然而愈发精美的画质和复杂的玩法&#xff0c;也给硬件带来超高的负载&#xff0c;导致玩家在游戏过程中&#xff0c;频繁出现掉帧卡顿…

C++基础知识-编译相关

记录C语言相关的基础知识 1 C源码到可执行文件的四个阶段 预处理(.i)、编译(.s)、汇编(.obj)、链接。 1.1 预处理 预处理阶段&#xff0c;主要完成宏替换、文件展开、注释删除、条件编译展开、添加行号和文件名标识&#xff0c;输出.i/.ii预处理文件。 宏替换&#xff0c;…

【AIGC评测体系】大模型评测指标集

大模型评测指标集 &#xff08;☆&#xff09;SuperCLUE&#xff08;1&#xff09;SuperCLUE-V&#xff08;中文原生多模态理解测评基准&#xff09;&#xff08;2&#xff09;SuperCLUE-Auto&#xff08;汽车大模型测评基准&#xff09;&#xff08;3&#xff09;AIGVBench-T2…

python_zabbix

zabbix官网地址&#xff1a;19. API19. APIhttps://www.zabbix.com/documentation/4.2/zh/manual/api 每个版本可以有些差异&#xff0c;选择目前的版本在查看对于的api接口#token接口代码 import requests apiurl "http://zabbix地址/api_jsonrpc.php" data {&quo…

顺序串算法库构建

学习贺利坚老师顺序串算法库 数据结构之自建算法库——顺序串_创建顺序串s1,创建顺序串s2-CSDN博客 本人详细解析博客 串的概念及操作_串的基本操作-CSDN博客 版本更新日志 V1.0: 在贺利坚老师算法库指导下, 结合本人详细解析博客思路基础上,进行测试, 加入异常弹出信息 v1.0补…

从零开始:如何设计一个现代化聊天系统

写在前面: 此博客内容已经同步到我的博客网站,如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/system/chat-system 在当今数字化时代,聊天系统已成为我们日常生活和工作中不可或缺的一部分。从个人交流到团队协作,从客户服务到社交网络,聊天应用…

内网渗透第四天!!!冲冲冲!!怎么绕过uac以及你会all劫持???不安全的服务路径以及服务权限,你会吗???

在第三天我们简单的说了一下绕过uac&#xff0c;但是我们使用的msf模块ask要对方管理员跟我们一起来进行操作&#xff0c;才可以进行提权的操作&#xff0c;这点就限制住了我们。我们今天来讲一下不用钓鱼的绕过的操作。 绕过uac&#xff1a; 使用uacme项目和msf联动来进行绕过…