Vue3实现滚动到容器底部时发送请求,加载新数据

news2025/1/20 5:52:48

问题来源

在项目中出现了需要在容器滚动到底部时,加载新的数据的需求,以下是解决的方案笔记

解决

画了个流程图:

如图,先添加一个动态加载的图标,还有全部数据载完的《到底啦...》

大概这么个样子,之后呢,我们需要用到@scroll方法和ref获取这个元素的scrollHeight 和scrollTop来机型判断加不加载数据,再使用上面说到的节流操作,就成功实现啦..代码如下,需要根据业务对应的请求...


// 节流, 是在重复的事件请求中,只执行一次

// eslint-disable-next-line @typescript-eslint/ban-types
export const throttle = (fn: any, delay: number): Function => {
  let throttleTimer: NodeJS.Timeout | null;
  return (...args: unknown[]) => {
    if (throttleTimer) {
      return;
    }
    throttleTimer = setTimeout(() => {
      fn.apply(this, args);
      throttleTimer = null;
    }, delay);
  };
};


let loadMoreThrottle = throttle(loadMore, 500);

const getData = () => {
  //获取新的数据
  const container: any = messageContainer.value;
 // 如果到底了,并且数据还未加载完
  if (
    container.scrollTop + container.clientHeight >= container.scrollHeight &&
    !down.value
  ) {
    console.log("到底了");
    loading.value = true;
    loadMoreThrottle();
  }
};


const loadMore = async () => {
  // 如果已经加载完了,无需加载新数据
  if (down.value) {
    return;
  }
  // 加载需要房前页数+1
  current.value++;
  // 根据业务设置请求参数啥的
  const commentQuery = {
    questionId: props.questionId,
    current: current.value,
    pageSize: 10,
  } as CommentQueryRequest;
  const res = await CommentControllerService.listCommentByPageUsingPost(
    commentQuery
  );
  if (res.code === 0) {
    //载入新数据
    allmessages.value.push(...(res.data.records));
    if (res.data.pages === res.data.current) {
      down.value = true;
    }
  } else {
    message.error("请求失败:" + res.message);
  }
  // 最后把加载中设置为false
  loading.value = false;
};

 同理,也可以用监听去做。

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

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

相关文章

【C++ Primer Plus学习记录】第5章复习题

1.入口条件循环和出口条件循环之间的区别是什么?各种C循环分别属于其中的哪一种? C提供了3种循环:for、while和do while循环。for和while循环都是入口条件循环,意味着程序将在执行循环体中的语句之前检查测试条件。do while循环是…

【IDEA】导入项目发现目录消失

错误截图 这个目录里我是有文件的,但是导入到idea后却看不见文件 错误原因: 删除目录的时候不小心将.iml文件给删除了! 解决办法 进入项目结构 选择模块,点击 导入模块 选择需要导入的模块的目录 从现有项目创建模块 --> 下…

智慧用电安全动态监控系统

智慧用电安全动态监控系统是一种先进的电力监控技术系统,它运用物联网、大数据、云计算等先进技术,对电力系统的运行状况进行实时监控和预警。 该系统依托电易云-智慧电力物联网,通过智能传感终端采集电气线路的实时运行数据,客户…

Redis的高可用模式

1. 什么是高可用? 高可用(High Availability, HA)是指在信息技术中确保系统、服务或应用程序在绝大多数时间内都是可操作和可访问的能力。这通常涉及以下几个关键方面: 最小化停机时间: 高可用系统的目标是减少因硬件故障、系统升…

【面试HOT200】二叉树——广度优先搜索篇

系列综述: 💞目的:本系列是个人整理为了秋招面试的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于【CodeTopHot200】进行的,每个知识点的修正和深入主要参…

怎样使用rtsp,rtmp摄像头低延时参于Web视频会议互动直播

业务系统中有大量的rtsp,rtmp等监控直播设备,原大部分都是单一业务监控直播之类,目前很多业务需要会议互动,需要监控参会,提出需摄像头拉流参会的需求,由于rtmp,rtsp原生不支持web播放&#xff…

springboot足球社区管理系统

springboot足球社区管理系统 成品项目已经更新!同学们可以打开链接查看!需要定做的及时联系我!专业团队定做!全程包售后! 2000套项目视频链接:https://pan.baidu.com/s/1N4L3zMQ9nNm8nvEVfIR2pg?pwdekj…

activemq启动成功但web管理页面却无法访问

前提: 在linux启动activemq成功!本地能ping通linux 处理方案: 确定防火墙是否关闭, 有两种处理方案:第一种-关闭防火墙;第二种-暴漏8161和61616两个端口 netstat -lnpt查看8161和61616端口 注意&#xf…

【超全】React学习笔记 下:路由与Redux状态管理

React学习笔记 React系列笔记学习 上篇笔记地址:【超全】React学习笔记 上:基础使用与脚手架 中篇笔记地址:【超全】React学习笔记 中:进阶语法与原理机制 React路由概念与理解使用 1. 引入 React路由是构建单页面应用(SPA, Sin…

【斗破年番】小医仙沐浴以毒攻毒,彩鳞怒杀蝎毕岩,泪目暂时下线

Hello,小伙伴们,我是拾荒君。 《斗破苍穹年番》国漫更新啦!刚更新,拾荒君就和我的小伙伴们去观看了。在斗破年番第73集中,蝎毕岩为了击败萧炎,不惜耗尽全身实力释放出魔毒斑,假装攻击小医仙,却…

C++ 基础篇

目录 C开发概述 C特点 C跨平台的原因 C编译器 C库 操作系统API C基本概念 注释 变量 常量 两种定义常量方式的区别 表示符命名规则 常见的关键字 数据类型 整型 浮点数 字符型 转义字符 字符串型 布尔类型 运算符 算术运算符 赋值运算符 比较运算符 逻…

linux常用命令-find命令与scp命令详解(超详细)

文章目录 前言一、find命令介绍1. find命令简介2. find命令的基本语法3. 常用的find命令选项和表达式 二、find命令示例用法1. 按照名称进行搜索2. 按照类型进行搜索3. 按照修改时间进行搜索4. 按照文件大小进行搜索5. 对搜索到的文件执行指定的命令6. 删除搜索到的文件 三、sc…

affinity好用还是ps好用?2024年最新功能解析

多年来,ps已经有了大量竞争对手。然而每次Photoshop都足以保持其领先地位。开源GIMP和Pixelmator都试图取代Photoshop,不过Photoshop对此不屑一顾。英国Serif公司研发了一款名为Affinity Photo的软件,声称可以叫板ps。今天我们看看有最有可能…

KRaft使用SASL_PLAINTEXT进行认证

需要有KRaft相关的基础,才行。可参阅之前学习记录Kafka 一、配置 首先需要了解SASL的含义,SASL全称为Simple Authentication and Security Layer,它主要是用于在客户端和服务器之间提供安全的身份验证机制。 Kafka 支持以下几种 SASL 验证…

【vue】尚硅谷vue3学习笔记

Vue3快速上手 1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:https://github.com/vuejs/vue-next/release…

【C语言之 CJson】学CJson看这一篇就够了

文章目录 前言一、下载CJson二、创建一个json2.1 创建json对象cJSON类型详解 2.2 创建键值对2.3 添加嵌套的 JSON 对象2.4 添加数组创建数组添加元素到数组添加数组到obj 2.5 将 JSON 对象转为字符串2.6 释放内存2.7 示例代码 三、解析json3.1 解析json root3.2 把一个key解析出…

SSM框架(六):SpringBoot技术及整合SSM

文章目录 一、概述1.1 简介1.2 起步依赖1.3 入门案例1.4 快速启动 二、基础配置2.1 三种配置文件方式2.2 yaml文件格式2.3 yaml读取数据方式(3种) 三、多环境开发3.1 yml文件-多环境开发3.2 properties文件-多环境开发3.3 多环境命令行启动参数设置3.4 多…

yolov5 7.0版本部署手机端。通过pnnx导出ncnn。

yolov5 7.0版本部署手机端。通过pnnx导出ncnn。 流程配置ncnn android yolov5导出自己模型的ncnn修改yolo.py文件导出TorchScript文件pnnx转torchscript为ncnn 安卓运行权重路径输入输出anchors 大小类别名generate_proposals方法修改 结果 流程 网络yolov5 的部署已经有很多了…

STM32串口接收不定长数据(接收中断+超时判断)

玩转 STM32 单片机,肯定离不开串口。串口使用一个称为串行通信协议的协议来管理数据传输,该协议在数据传输期间控制数据流,包括数据位数、波特率、校验位和停止位等。由于串口简单易用,在各种产品交互中都有广泛应用。 但在使用串…

基础组件总结(以Element UI组件库为例)

一般对一个组件的使用方式: 每一个组件都有被绑定的数据, (1)首先会对组件的数据初始化(a.data中赋初值 b. 在生命周期函数created或mounted中为变量赋予初值) (2)由于不同组件的…