HTML中滚动加载的实现

设置div的overflow属性,可以使得该div具有滚动效果,下面以div中包含的是table来举例。
当table的元素较多,以至于超出div的显示范围的话,观察下该div元素的以下3个属性:
clientHeight是div的显示高度,scrollHeight是整个table的高度,scrollTop是上方溢出区高度,注意下,下方溢出高度没有直接的属性,需要计算得到,就是scrollHeight-clientHeight-scrollTop
在这里插入图片描述
有时候,我们在界面上不提供上一页、下一页这样的按钮,而是通过滚动(PC上通过鼠标滚动来实现,触摸屏通过手指在屏幕上滑动来实现)来加载前面或后面的数据,当向上滚动时如果上方溢出区高度小于某个阈值时加载前面的记录,当向下滚动时如果下方溢出区高度小于某个阈值时加载后面的记录。向后追加数据后,当前可视区域内容不会有变化,而向前插入数据的话,为了不影响可视区域内容,我们可以将scrollTop调整下高度,具体增大值为插入后的scrollHeight与插入前的scrollHeight之差。
从内存和性能方面考虑,html的table中元素应该有一个数量限制,不应该只允许添加而从不删除,所以可以在添加数据后进行判断,如果超限则执行删除,向前插入则删除最后的行,向后插入则删除最先的行。
有scroll事件,但是没有向上滚动或者向下滚动事件,滚动的方向是需要计算判断的,比如保存上次滚动时的scrollTop,跟当前的scrollTop进行比较,当前的大,则是向下滚动,当前的小,则是向上滚动。
这样基本完成了设计,但是仍有一些坑,一般数据的获取是从后端http异步调用得到,会花一些时间,而scroll的事件是浏览器前端触发,在数据获取期间,不应该继续向后端发起数据获取请求,每次数据获取完成时,再允许向后端发起数据获取请求,可以设置一个变量来标识是否在进行数据获取处理。还有一个可能遇到的坑,存在一定概率发生,当上次滚动事件完成时,可视区域正好停在滚动区域顶部或者底部,这时如果向上滚动或者向下滚动时,浏览器可能会屏蔽向上滚动事件发生或向下滚动事件发生。那么此时要不要采用其他方式来触发呢?可以的,此时不能只监听scoll事件了,对于鼠标滚动事件(wheel)要监听下,从事件的deltaY属性跟此前的值进行比较来判断是向上滚动还是向下滚动,或者对触屏的touchstart事件与touchmove事件进行监听,以判断是向上滑动还是向下滑动。参考代码如下:

    <script>// 监听 scroll 事件window.addEventListener('scroll', function() {console.log('Scroll event triggered, scrollTop:', document.documentElement.scrollTop);});// 监听 wheel 事件(鼠标滚轮或触摸板)window.addEventListener('wheel', function(event) {console.log('Wheel event triggered, deltaY:', event.deltaY);});// 监听 touchstart 和 touchmove 事件(触摸设备)let startY = 0;window.addEventListener('touchstart', function(event) {startY = event.touches[0].clientY; // 记录触摸起始位置});window.addEventListener('touchmove', function(event) {const currentY = event.touches[0].clientY; // 获取当前触摸位置const deltaY = currentY - startY; // 计算滑动距离console.log('Touchmove event triggered, deltaY:', deltaY);});</script>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04系统没有WiFi图标解决方案_安装Intel网卡驱动

文章目录 1. wifi网卡配置1.1 安装intel官方网卡驱动backport1.1.1 第四步可能会出现问题 1.2 ubuntu官方的驱动1.3 重启 1. wifi网卡配置 我的电脑是华硕天选4&#xff08;i7&#xff0c;4060&#xff09;&#xff0c;网卡型号intel ax201 ax211 ax210通用。 参考文章&#…

Anacoda进入自己的集成环境CLI中

鼠标左键单击那个"播放"图标&#xff0c;在弹出的菜单中选择"Open Terminal"&#xff0c;即可进入。 还有一种是通过Scripts/active.bat文件的方式&#xff0c;是Windows下的方案&#xff0c;在当前目录下执行cmd&#xff0c;输入active切换Anacoda集成环…

设备健康管理系统是什么,设备健康管理系统多少钱?

想象一下&#xff0c;你的汽车在仪表盘报警前 3 天&#xff0c;手机就收到 “发动机轴承剩余寿命 1500 公里” 的提醒 —— 这就是 ** 设备健康管理系统&#xff08;EHM&#xff09;** 的日常。在制造业&#xff0c;设备故障每年造成全球 3.4 万亿美元损失&#xff0c;而 80% 的…

解锁智慧养老新可能,全面提升养老生活质量

在老龄化浪潮席卷全球的今天&#xff0c;如何让老年人的生活更加安全、便捷、丰富多彩&#xff0c;成为了我们共同的责任与追求。辉视智慧养老方案&#xff0c;正是这样一款以老年人需求为核心&#xff0c;集信息查询、活动参与、紧急对讲与安全保障于一体的智慧养老解决方案。…

Error: The project seems to require pnpm but it‘s not installed.

Error: The project seems to require pnpm but it‘s not installed 原因 该错误信息表明你的项目需要使用 pnpm 作为包管理工具&#xff0c;但系统中尚未安装 pnpm。 解决方法 【1】删除pnpm.lock 【2】npm install -g pnpm 之后再重新启动

Zabbix监控自动化(Zabbix Mnitoring Automation)

​​​​​​zabbix监控自动化 1、自动化监控(网络发现与自动注册只能用其一) 1.1 ansible安装zabbix agent 新采购100台服务器&#xff1a; 1、安装操作系统 2、初始化操作系统 3、安装zabbix agent 1.手动部暑 2.脚本部暑(shell expect) 3.ansible 4、纳入监控 1.…

JVM垃圾回收

1. Java垃圾回收机制 为了让程序员更专注于代码的实现&#xff0c;而不用过多的考虑内存释放的问题&#xff0c;所以&#xff0c;在Java语言中&#xff0c;有了自动的垃圾回收机制&#xff0c;也就是我们熟悉的GC(Garbage Collection)。有了垃圾回收机制后&#xff0c;程序员只…

jmeter--(吞吐量控制器)逻辑控制器

在 JMeter 中&#xff0c;吞吐量控制器&#xff08;Throughput Controller&#xff09; 是一种逻辑控制器&#xff0c;用于控制其子节点&#xff08;请求、逻辑控制器等&#xff09;的执行次数或百分比&#xff0c;从而调整测试计划的吞吐量。它通常用于模拟不同比例的用户行为…

SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)

目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) &#xff08;1&#xff09;安装axios。(vue工程目录) &#xff08;2&#xff09;封装请求工具类。(request.js) <1&…

Atom of Thoughts for Markov LLM Test-Time Scaling论文解读

近年来&#xff0c;大型语言模型在训练规模的扩展上取得了显著的性能提升。然而&#xff0c;随着模型规模和数据量的增长遇到瓶颈&#xff0c;测试时扩展&#xff08;test-time scaling&#xff09;成为进一步提升模型能力的新方向。传统的推理方法&#xff0c;如思维链&#x…

前端字段名和后端不一致?解锁 JSON 映射的“隐藏规则” !!!

&#x1f680; 前端字段名和后端不一致&#xff1f;解锁 JSON 映射的“隐藏规则” &#x1f31f; 嘿&#xff0c;技术冒险家们&#xff01;&#x1f44b; 今天我们要聊一个开发中常见的“坑”&#xff1a;前端传来的 JSON 参数字段名和后端对象字段名不一致&#xff0c;会发生…

AI训练如何获取海量数据,论平台的重要性

引言&#xff1a;数据——AI时代的“新石油” 在人工智能和大模型技术飞速发展的今天&#xff0c;数据已成为驱动技术进步的 “ 燃料 ”。无论是训练聊天机器人、优化推荐算法&#xff0c;还是开发自动驾驶系统&#xff0c;都需要海量、多样化的数据支持。 然而&#xff0c;获…

k8s的存储

一 configmap 1.1 configmap的功能 configMap用于保存配置数据&#xff0c;以键值对形式存储。 configMap 资源提供了向 Pod 注入配置数据的方法。 镜像和配置文件解耦&#xff0c;以便实现镜像的可移植性和可复用性。 etcd限制了文件大小不能超过1M 1.2 configmap的使用…

递归、搜索与回溯第三讲:综合练习

递归、搜索与回溯第三讲&#xff1a;综合练习 1.找出所有子集的异或总和再求和2.全排列3.电话号码的字母组合4.组合5.目标和6.组合总和7.字母大小写全排列8.优美的排列9.N皇后10.有效的数独11.括号生成12.解数独13.单词搜索14.黄金矿工15.不同路径III 有决策树的递归总结&#…

Excel 小黑第12套

对应大猫13 涉及金额修改 -数字组 -修改会计专用 VLOOKUP函数使用&#xff08;查找目标&#xff0c;查找范围&#xff08;F4 绝对引用&#xff09;&#xff0c;返回值的所在列数&#xff0c;精确查找或模糊查找&#xff09;双击填充柄就会显示所有值 这个逗号要中文的不能英…

AI重构工程设计、施工、总承包行业:从智能优化到数字孪生的产业革命

摘要 AI正深度重构工程设计、施工与总承包行业&#xff0c;推动从传统经验驱动向数据智能驱动的转型。本文系统性解析AI当前在智能优化设计、施工过程管理、全生命周期数字孪生等场景的应用&#xff0c;展望未来AI在自动化决策、跨域协同等领域的潜力&#xff0c;并从投入产出…

Java高频面试之集合-15

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;解决哈希冲突有哪些方法&#xff1f; 1. 开放寻址法&#xff08;Open Addressing&#xff09; 核心思想&#xff1a;当哈…

vulhub Matrix-Breakout

1.下载靶机&#xff0c;打开靶机和kali虚拟机 2.查询kali和靶机ip 3.浏览器访问 访问81端口有登陆界面 4.扫描敏感目录 kali dirb 扫描 一一访问 robot.txt提示我们继续找找&#xff0c;可能是因为我们的字典太小了&#xff0c;我们换个扫描器换个字典试下,利用kali自带的最大…

docker-compose install nginx(解决fastgpt跨区域)

CORS前言 CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种安全措施,它允许或拒绝来自不同源(协议、域名、端口任一不同即为不同源)的网页访问另一源中的资源。它的主要作用如下: 同源策略限制:Web 浏览器的同源策略限制了从一个源加载的文档或脚本如何与另一…

【Java】——方法的使用(从入门到进阶)

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;【Java】内容概括 文章目录&#xff1a; 1.方法的概念及使用1.1 什么是方法&#xff1f;1.2 方法的意义1.3 方法的定义…