当前位置: 首页 > news >正文

封装触底加载组件

 (1)首先创建一个文件名为:InfiniteScroll.vue

<template><div ref="scrollContainer" class="infinite-scroll-container"><slot></slot><div v-if="loading" class="loading-spinner">加载中...</div></div>
</template><script setup>import {ref,onMounted,onUnmounted,defineProps} from 'vue';const props = defineProps({loadMore: {type: Function,required: true},loading: {type: Boolean,default: false}});const scrollContainer = ref(null);const handleScroll = () => {if (!scrollContainer.value) return;const container = scrollContainer.value;const containerHeight = container.clientHeight;const scrollTop = container.scrollTop;const contentHeight = container.scrollHeight;if (scrollTop + containerHeight >= contentHeight - 10) {//触发逻辑if (!props.loading) {props.loadMore();}}};onMounted(() => {if (scrollContainer.value) {scrollContainer.value.addEventListener('scroll', handleScroll);}});onUnmounted(() => {if (scrollContainer.value) {scrollContainer.value.removeEventListener('scroll', handleScroll);}});
</script><style scoped>.infinite-scroll-container {overflow-y: auto;position: relative;}.loading-spinner {text-align: center;padding: 10px;}
</style>

(2)如何使用

<template><InfiniteScroll :loadMore="loadMoreData" :loading="loading"><!-- 列表内容 --><div v-if="isEnd" class="end-message">已经到底了</div></InfiniteScroll>
</template><style scoped>
.end-message {text-align: center;padding: 10px;color: #888;
}
</style>

示例:

<InfiniteScroll :loadMore="loadMoreData" class="shellwantbuy-center" v-if="buylstData.length>0"><div class="shellwantbuy-center-item" v-for="(item,index) in buylstData" :key="item">内容展示</div><div v-if="isEnd" class="end-message">已经到底了</div><div v-if="loading" class="loading-spinner">加载中...</div>
</InfiniteScroll><script setup>
import {Tradewanttobuypull,Tradewanttobuyuserlst} from '@/api/modules/secondarymMarket'import InfiniteScroll from '@/components/InfiniteScroll.vue'import {onMounted,ref,watch} from 'vue'import empyt from '@/components/EmptyState.vue'const buylstData = ref([])const token = uni.getStorageSync('token')const page = ref(1);const pageSize = 10;const loading = ref(false);const last_page = ref()const isEnd = ref(false);const loadMoreData = async () => {if (loading.value) return;loading.value = true;try {const data = await Tradewanttobuyuserlst({page_size: pageSize,page: page.value,type: '1',token,});const buydata = data;last_page.value = buydata.data.last_pageconsole.log(page.value,last_page.value)if (page.value <= last_page.value) {buylstData.value.push(...buydata.data.data);page.value++;} else {isEnd.value = true;}} catch (error) {console.error('Failed to load data:', error);} finally {loading.value = false;}};onMounted(() => {loadMoreData()})
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Java并发编程一】八千字详解多线程
  • 【Day08】
  • python的统计分析库scipy.stats使用方法
  • SAP项目中沟通的几点总结
  • 科研小白成长记40——第三个五年计划
  • Excel文档的读取【2】
  • 3 html5之css新选择器和属性
  • Python画笔案例-038 绘制齿形图
  • SSL 证书 | 免费获取与自动续期全攻略
  • 贝壳面试:什么是回表?什么是索引下推?
  • 华为-2017-测试工程师笔试试卷
  • 【网络】UDP协议的简单使用
  • Python实现读取Excel数据详细教学版
  • [环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法
  • 安防监控视频平台LntonAIServer视频智能分析平台新增视频质量诊断功能
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android 控件背景颜色处理
  • CSS 三角实现
  • echarts花样作死的坑
  • Git的一些常用操作
  • Linux后台研发超实用命令总结
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python_OOP
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 闭包--闭包作用之保存(一)
  • 检测对象或数组
  • 聊聊flink的BlobWriter
  • 配置 PM2 实现代码自动发布
  • 批量截取pdf文件
  • 小程序开发中的那些坑
  • 云大使推广中的常见热门问题
  • 白色的风信子
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • #if和#ifdef区别
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (175)FPGA门控时钟技术
  • (20050108)又读《平凡的世界》
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ./和../以及/和~之间的区别
  • .net core 6 redis操作类
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net8.0与halcon编程环境构建
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET简谈设计模式之(单件模式)
  • .NET企业级应用架构设计系列之结尾篇