基于Vue2实现滚动过程中数据懒加载

news2024/11/27 21:32:17

在这里插入图片描述

以下为实现滚动懒加载的过程:
1、在data对象中定义了items数组,用于存放已加载的itemloading状态,当前页数page,每页数量pageSize,以及距离底部的阈值threshold
2、在mounted钩子函数中,首次加载数据调用loadMore方法,并绑定滚动事件。
3、loadMore方法被调用后,将loading状态设为true,模拟异步加载数据,往items数组中push每次固定数量的item,再将loading状态设为falsepage加1。
4、handleScroll方法监听滚动事件,获取当前滚动位置scrollTop,视口高度windowHeight,以及文档总高度scrollHeight。如果文档总高度 - (滚动位置 + 视口高度)小于阈值threshold,则触发loadMore方法加载更多数据。
5、beforeDestroy钩子函数解绑滚动事件。

以下代码把loadMore()函数修改为真正的http请求即可,下面代码中使用settimeout模拟生成数据

<template>
  <div style="height: 100px">
    <div v-for="item in items" :key="item.id" class="item">{{ item.text }}</div>
    <div v-if="loading">Loading...</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [], // 用于存放已加载的 item
      loading: false, // 控制是否展示 loading
      page: 1, // 当前页数
      pageSize: 5, // 每页数量
      threshold: 100, // 距离底部多少像素时触发加载
    };
  },
  mounted() {
    this.loadMore(); // 首次加载数据
    window.addEventListener("scroll", this.handleScroll); // 绑定滚动事件
  },
  methods: {
    loadMore() {
      this.loading = true; // 开启 loading 状态
      // 模拟异步加载数据
      setTimeout(() => {
        for (let i = 0; i < this.pageSize; i++) {
          this.items.push({
            id: this.items.length + 1,
            text: `Item ${this.items.length + 1}`,
          });
        }
        this.loading = false; // 关闭 loading 状态
        this.page++;
      }, 1000);
    },
    handleScroll() {
      const scrollTop =
        document.documentElement.scrollTop || document.body.scrollTop; // 获取当前滚动位置
      const windowHeight = window.innerHeight; // 获取视口高度
      const scrollHeight =
        document.documentElement.scrollHeight || document.body.scrollHeight; // 获取文档总高度
      if (scrollHeight - (scrollTop + windowHeight) < this.threshold) {
        // 判断是否已滚动到底部
        this.loadMore(); // 触发加载更多
      }
    },
  },
  beforeDestroy() {
    window.removeEventListener("scroll", this.handleScroll); // 解绑滚动事件
  },
};
</script>
<style lang="less" scoped>
.item {
  height: 200px;
}
</style>

scrollTop表示当前滚动条的位置,即已经滚动过的高度。
window.innerHeight表示浏览器视口的高度。
scrollHeight表示当前文档的总高度,包括了未显示出来的部分。

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

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

相关文章

Adaptive AUTOSAR——State Management(VRTE 3.0 R21-11)

状态管理是自适应平台服务中的一个功能集群。 在自适应平台中&#xff0c;状态决定了一组活动的自适应应用程序。 特定于项目的应用程序&#xff0c;即状态管理器&#xff0c;决定何时请求状态更改&#xff0c;从而更改当前活动的应用程序集。状态管理器是特定于项目的&#…

【Golang】三分钟让你快速了解Go语言为什么我们需要Go语言?

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Go语言核心编程近期目标&#xff1a;写好专栏的每一篇文章 目录一、Go语…

Pytorch基础 - 3. torch.utils.tensorboard

目录 1. 简介 2. 基本步骤 3. 示例1 - 可视化单条曲线 4. 示例2 - 可视化多条曲线 5. 示例3 - 可视化网络结构 1. 简介 Tensorboard是Tensorflow的可视化工具&#xff0c;常用来可视化网络的损失函数&#xff0c;网络结构&#xff0c;图像等。后来将Tensorboard集成到了P…

wps如何修改已经存在的目录标题内容?

如需了解更多办公应用的相关知识&#xff0c;可进入到赛效官网查看应用资讯或者应用问答栏目。 在WPS文档中&#xff0c;为方便大家查看文档中的内容&#xff0c;可以给文档内容添加目录&#xff0c;很多人由于对文档功能不太熟悉&#xff0c;所以当目录生成以后&#xff0c;想…

高效又稳定的ChatGPT大模型训练技巧总结,让训练事半功倍!

文&#xff5c;python前言近期&#xff0c;ChatGPT成为了全网热议的话题。ChatGPT是一种基于大规模语言模型技术&#xff08;LLM&#xff0c; large language model&#xff09;实现的人机对话工具。现在主流的大规模语言模型都采用Transformer网络&#xff0c;通过极大规模的数…

Day941.仓库版本管理 -系统重构实战

仓库&版本管理 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于仓库&版本管理的内容。 当代码以及团队达到一定的规模以后&#xff0c;这会给项目仓库和版本的管理带来诸多问题。 一张常见问题的表格&#xff0c;不妨“对号入座”&#xff0c;看看项目有没…

【常见CSS扫盲雪碧图】从源码细看CSS雪碧图原理及实现,千字详解【附源码demo下载】

【写在前面】其实估计很多人都听过雪碧图&#xff0c;或者是CSS-Sprite&#xff0c;在很多门户网站就会经常有用到的&#xff0c;之所有引出雪碧图这个概念还得从前端加载多个图片时候页面闪了一下说起&#xff0c;这样给人的视觉效果体验很差&#xff0c;也就借此机会和大家说…

Linux查看串行端口

查看串口驱动 cat /proc/tty/driver/serial查看串口设备 dmesg | grep ttyS*[rootlocalhost driver]# cat /proc/tty/driver/serial serinfo:1.0 driver revision: 0: uart:16550A port:000003F8 irq:4 tx:0 rx:0 1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD 2:…

攻防世界-inget(简单的SQL注入、万能密码)

目录 1、手工注入&#xff08;万能密码原理&#xff09; 2、sqlmap实现 3、常用参数 1、手工注入&#xff08;万能密码原理&#xff09; 打开链接&#xff0c;提示输入id并尝试绕过 尝试一下万能密码&#xff0c;使用逻辑语句使结果返回 构造payload /?id or 我们这里是…

Java虚拟机内存区域

Java虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器 是一块较小的内存空间&#xff0c;可以看作当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要通过更改这个计数器的值来改变下一条需要执行的字节码。 由于各个线…

DAY 35 sed文本编辑器

文本三剑客&#xff1a;都是按行读取后处理。 grep 过滤行内容 awk 过滤字段 sed 过滤行内容&#xff1b;修改行内容 sed编辑器 sed是一种流编辑器&#xff0c;流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流 sed编辑器可以根据命令来处理数据流中的…

Shell编程(二)

上一章&#xff1a; Shell编程_做测试的喵酱的博客-CSDN博客 七、ping shell脚本&#xff0c;是一个面向过程的编程语言&#xff0c;没有类和对象的概念。用的最多的就是函数。 查看当前服务&#xff0c;是否能ping通baidu ping www.baidu.com [rootecs-39233 dev]# ping ww…

眺望2023:房企“三大护法”如何助力穿越周期?

2022 年的地产行业尤为艰难&#xff0c;土地和商品房成交量明显下滑&#xff0c;许多房企的业绩都呈现收缩态势。 不过&#xff0c;今年以来房地产市场似乎出现企稳信号。国家统计局数据显示&#xff0c;今年1~2月全国商品房销售面积和销售额的下跌幅度明显收窄&#xff0c;住…

18-java单列集合

java单列集合1.集合体系结构1.1 单列集合1.2 双列集合2. 单列集合体系结构3.Collection集合顶层接口3.1 Collection的遍历方法3.1.1 迭代器遍历3.1.2 增强for遍历3.1.3 Lambda表达式4. List单列集合4.1 List4.1.1 List集合特点4.1.2 List集合的特有方法4.1.3 List集合遍历方法4…

计算机组成原理实验三-----系统总线和具有基本输入输出功能的总线接口实验

总线是计算机中连接各个功能部件的纽带&#xff0c;是计算机各部件之间进行信息传输的公共通路。 总线不只是一组简单的信号传输线&#xff0c;它还是一组协议。他有两大特征 分时: 同一总线在同一时刻&#xff0c;只能有一个部件占领总线发送信息&#xff0c;其他部件要发送信…

游戏基础—Android平台进程模块信息获取

记得学习编程时的第一个helloworld程序&#xff1a; #include<stdio.h> Int main(int argc, char **argv) { printf(“Hello World”); return 0; } 打印” Hello World”&#xff0c;使用的是printf函数。但是&#xff0c;我们并没有去实现printf函数的功能&#xff0…

javascrip语法

JavaScript 语法涉及到很多方面&#xff0c;以下是常见的详细语法&#xff1a; 1. 变量 变量用于存放值&#xff0c;关键字 var 可以定义变量。 // javascript var x 5; // 定义变量 x&#xff0c;并赋值为 52. 数据类型 JavaScript 中有多种数据类型&#xff0c;包括&…

iOS 紧急通知

一般通知 关于通知的各种配置和开发&#xff0c;可以参考推送通知教程&#xff1a;入门 – Kodeco&#xff0c;具有详细步骤。 紧急通知表现 紧急通知不受免打扰模式和静音模式约束。当紧急通知到达时&#xff0c;会有短暂提示音量和抖动&#xff08;约2s&#xff09;。未锁…

一文速学数模-K-means聚类算法实战:信用卡用户画像聚类分析

目录 前言 一、用户画像概述 1.用户画像 2.为何用聚类算法作用户画像 二、数据质量校验 1.数据背景 2.数据说明 三、数据预处理 1.数据空缺值检验 2.数据归一化 四、K-means聚类 step1:选取K值 手肘法 step2:计算初始化K点 step3:迭代计算重新划分 五.画像分析 …

【LeetCode:221. 最大正方形 | 暴力递归=>记忆化搜索=>动态规划 | 二维dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…