首页 > 其他分享 >下拉加载

下拉加载

时间:2023-05-05 14:58:04浏览次数:35  
标签:const 滚动条 getElementById div document 加载

需求:当有大量数据时,页面需要滚动条下拉到底部时加载更多

当一个列表存在成千上万条,但是又没有分页组件的情况,不能一次性加载大量数据。这个时候就需要滚动条下拉到底部时,再重新加载数据

image

思路

pageSize设置为20条或更多,超出页面高度;监听滚动条下滑,需要加一个防抖,当滚动条到达底部的时候,再次请求接口,pageNo+1,将新请求的列表数据合并已请求的数据。当最后数据加载完毕,又一次到底时,判断上一次加载的数据pageSize * pageNo >= totalCount,如果大于等于,则数据所有加载完毕

实现

  1. 获取整个滚动区域div元素,对div进行滚动监听
scrollHandle () {
  this.$nextTick(() => {
    const el = document.getElementById('scrollId')
    el.addEventListener('scroll', this.debounce, true)
  })
}
  1. 加入防抖
debounce () {
  if (this.timer) {
    clearTimeout(this.timer)
  }
  this.timer = setTimeout(() => { this.getHeight() }, 500)
}
  1. 处理滚动方法
getHeight () {
   const that = this
  const clientHeight = document.getElementById('scrollId').clientHeight
  //const htmlHeight = document.getElementById('scrollId').scrollHeight
  const htmlHeight = document.getElementById('listId').offsetHeight
  const scrollTop = document.getElementById('scrollId').scrollTop
  if (clientHeight + scrollTop === htmlHeight) {
    console.log('我到底了')
    if (that.totalCount <= that.pageNo * 20) {
      that.$message.warning('数据加载完毕')
      return
    }
    that.isLoading = true
    that.pageNo++
    // 重新请求list
    that.getMatterList()
  }
   this.timer = null
}

scrollTop: 滚动出div顶部高度

offsetHeight:div的高度加padding+border

clientHeight:div可视区域高度不包括border和margin

scrollHeight: div的全部高度,包含不可视区域

标签:const,滚动条,getElementById,div,document,加载
From: https://www.cnblogs.com/wang--chao/p/17371947.html

相关文章

  • el-select数据太多造成页面卡顿?el-select实现触底加载
    当我们使用el-select下拉框的时候,会遇到后端放回的数据太过庞大(成千上万条),导致页面渲染的时候造成卡顿现象。这时候我们可以利用触底加载方法减少资源的消耗,避免页面卡顿。思路:这时候我们可以利用vue的自定义指令,监听到他的下拉滚动事件,当滚动到最后时,(下拉宽高度+可滑动高度距离......
  • vue搭建脚手架出现:无法加载文件 D:\SoftWare\NodeJS\node_global\vue.ps1
    一、前言用VsCode搭建Vue3脚手架时,提示“无法加载文件D:\SoftWare\NodeJS\node_global\vue.ps1”文件 二、解决方法以管理员身份打开VSCode编辑器首先执行get-ExecutionPolicy查看执行策略然后执行set-ExecutionPolicyRemoteSigned把策略模式改为RemoteSigned更改执行......
  • yarn : 无法加载文件 在此系统上禁止运行脚本
    yarn:无法加载文件C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅https:/go.microsoft.com/fwlink/?LinkID=135170中的about_Execution_Policies。所在位置行:1字符:1+yarn--registry=https://registry.npmmirro......
  • Avalonia实现滑动加载
    Avalonia版本V0.10.18privatevoidScrollViewer_OnScrollChanged(object?sender,ScrollChangedEventArgse){varvm=(MainWindowViewModel)DataContext;vart=(ScrollViewer)sender;//Console.WriteLine($"偏移量:{t.O......
  • 【nodejs基础】模块加载机制及npm指令详解03
    1.模块化的基本概念模块化:是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。把代码进行模块化拆分的好处*提高了代码的复......
  • 关于Android studio的虚拟机Webview出现网页无法加载,显示net::ERR_NAMENOT_RESOLVED的
    一开始出现了这个错误net::ERR_CLEARTEXT_NOT_PERMITTED参考这三个文献,https://www.cnblogs.com/suhq/p/14414882.htmlhttps://blog.csdn.net/qq_59125846/article/details/121953461https://blog.csdn.net/weixin_43169336/article/details/128379580都试了一遍后,问题消失,......
  • JVM类加载机制
    1.类加载的生命周期类的加载过程包括:加载、验证、准备、解析、初始化(解析某些情况下可以在初始化阶段后开始;几个阶段按顺序开始,并非进行或完成,这些阶段通常是互相交叉混合进行。)类的加载机制:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析......
  • 【SpringBoot】【一】 加载初始化器、监听器详解
    1 前言本节主要讲下SpringBoot启动的时候,加载初始化器、监听器的过程哈。2 加载时机我们先来看下加载的时机,也就是什么时候加载的呢,就是我们SpringBoot启动的时候,创建SpringApplication的时候就会去加载的,我们看下:@SpringBootApplicationpublicclassDemoApplicati......
  • SpringBoot项目部署在外置Tomcat正常启动,但项目没有被加载的问题
    最近打算部署个SpringBoot项目到外置Tomcat运行,但是发现tomcat启动成功,访问却一直404,刚开始以为是Tomcat的问题,就一直在改Tomcat配置。最后发现tomcat启动时根本就没加载到项目,因为控制台没有打印"SpringBoot"的项目标志经过一番百度查找,最后发现是因为项目启动类没有继承Spring......
  • NGINX 加载动态模块
    NGINX1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。#./configure--help|grepdynamic--with-http_xslt_module=dynamicenabledynamicngx_http_xslt_modul......