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

JavaScript滚动事件

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

✨ 前言

        滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助我们实现许多实用的功能。

        本文将详细介绍页面与元素的滚动事件,如何跟踪滚动距离,以及判断滚动到底部的方法。通过学习,相信大家可以轻松处理各种滚动需求,丰富页面交互体验。

✨ 正文

本文介绍页面和元素的滚动事件。

页面滚动

当页面滚动时,会触发 documentscroll 事件:

document.onscroll = () => {// 页面滚动时做些什么  
};

还可以通过 scrollY 属性读取垂直滚动距离:

document.onscroll = () => {let scrolled = document.documentElement.scrollTop;// scrolled equal to scrollY for compatibility  
};

 

元素滚动

对于可滚动元素,我们可以监听 scroll 事件:

// HTML
<div id="container" style="height: 200px;overflow: auto">...大量内容...  
</div>// JavaScript 
container.onscroll = () => {// 容器滚动时显示滚动距离alert(`Scrolled ${container.scrollTop} px from top`); 
};

这适用于任意 overflow 为 scroll, autooverlay 的元素。

滚动到底部检查

一个常见需求是检查用户是否滚动到页面或元素底部:

// container 为可滚动元素 
container.onscroll = function() {if (container.scrollTop + container.clientHeight == container.scrollHeight) {// 滚动到底部}
};

 是通过对比滚动距离和总高度来判断。

scroll事件频率控制

scroll事件会高频触发,通常每100-200毫秒触发一次。这可能导致性能问题。

我们可以使用throttledebounce来限制回调函数的调用频率:

// throttle 版
let throttleScroll = throttle(onScroll, 100);elem.addEventListener('scroll', throttleScroll);// debounce 版 
let debounceScroll = debounce(onScroll, 200);elem.addEventListener('scroll', debounceScroll);

这样可以避免scroll事件过于频繁地触发处理函数。

滚动内容变化监听

有时我们需要在元素滚动范围内的内容变化时得到通知。可以监听resizescroll事件来处理:

elem.addEventListener('resize', onResizeOrScroll);
elem.addEventListener('scroll', onResizeOrScroll);function onResizeOrScroll(){// 检查elem中内容变化  
}

 

resize事件确保加载更多内容时也能得到通知。

这在构建滚动diffs加载更多内容的界面时很有用。

✨ 结语

        滚动事件为我们提供了实时访问滚动状态的能力。合理使用可以避免过度重复渲染,优化性能。

        本文不仅介绍了滚动事件的监听方法,还展示了防抖处理和监听内容变化的技巧。希望通过这个博客,大家已可以轻松应对各种滚动事件处理需求。如果还有疑问,欢迎评论区讨论。

相关文章:

JavaScript滚动事件

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助…...

4.0 Zookeeper Java 客户端搭建

本教程使用的 IDE 为 IntelliJ IDEA&#xff0c;创建一个 maven 工程&#xff0c;命名为 zookeeper-demo&#xff0c;并且引入如下依赖&#xff0c;可以自行在maven中央仓库选择合适的版本&#xff0c;介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍&#xff1a;…...

C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?

目录 1.使用动态数组&#xff08;ArrayList&#xff09;&#xff1a; 2.使用 jagged array&#xff08;不规则数组&#xff09;&#xff1a; 3.使用 List &#xff1a; 4.使用数组复制&#xff1a; 在C#中&#xff0c;数组的长度是固定的&#xff0c;一旦声明和初始化&…...

3.1 Verilog 连续赋值

关键词&#xff1a;assign&#xff0c; 全加器 连续赋值语句是 Verilog 数据流建模的基本语句&#xff0c;用于对 wire 型变量进行赋值。&#xff1a; 格式如下 assign LHS_target RHS_expression &#xff1b; LHS&#xff08;left hand side&#xff09; 指赋值操作…...

【http】2、http request header Origin 属性、跨域 CORS、同源、nginx 反向代理、预检请求

文章目录 一、Origin 含义二、跨源资源共享&#xff1a;**Cross-Origin Resource Sharing** CORS2.1 跨域的定义2.2 功能概述2.3 场景示例2.3.1 简单请求2.3.2 Preflighted requests&#xff1a;预检请求 2.4 header2.4.1 http request header2.4.1.1 Origin2.4.1.2 Access-Con…...

LangChain pdf的读取以及向量数据库的使用

以下使用了3399.pdf&#xff0c; Rockchip RK3399 TRM Part1 import ChatGLM from langchain.chains import LLMChain from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain.chains import Simp…...

VUE学习——事件修饰符

阻止默认事件 <template><a click"onClickHandle" href"https://www.baidu.com">baidu</a><a click.prevent"onClickHandle" href"https://www.baidu.com">baidu</a> </template> <script>…...

开放平台技术架构设计与实现的实战总结

开放平台是企业向外部开发者提供API接口和服务的平台&#xff0c;促进生态系统的建设和业务拓展。本文将介绍开放平台技术架构的设计原则和实现方法&#xff0c;帮助读者了解如何构建一个稳健、安全且易于扩展的开放平台。 1. 什么是开放平台&#xff1f; - 解释了开放平台…...

飞桨自然语言处理框架 paddlenlp的 trainer

飞桨&#xff08;PaddlePaddle&#xff09;的NLP库PaddleNLP中的Trainer类是一个用于训练和评估模型的简单但功能完整的循环。它被优化用于与PaddleNLP一起使用。Trainer类简化了训练过程&#xff0c;提供了自动的批处理、模型保存、日志记录等特性。 以下是Trainer类的主要参数…...

SQL世界之命令语句Ⅲ

目录 一、SQL JOIN 1.JOIN 和 Key 2.使用 JOIN 3.不同的 SQL JOIN 二、SQL INNER JOIN 关键字 1.SQL INNER JOIN 关键字 2.INNER JOIN 关键字语法 3.内连接&#xff08;INNER JOIN&#xff09;实例 三、SQL LEFT JOIN 关键字 1.SQL LEFT JOIN 关键字 2.LEFT JOIN 关…...

Snoop Version 2 Packet Capture File Format

RFC1761 - Snoop Version 2 Packet Capture File Format, FEBRUARY 1995 本备忘录的状态 本备忘录为互联网社区提供帮助信息。 本备忘录不作为任何类型的互联网标准。 本备忘录的分发不受限制。 Status of this Memo This memo provides information for the Internet communit…...

扩展说明: 指令微调 Llama 2

这篇博客是一篇来自 Meta AI&#xff0c;关于指令微调 Llama 2 的扩展说明。旨在聚焦构建指令数据集&#xff0c;有了它&#xff0c;我们则可以使用自己的指令来微调 Llama 2 基础模型。 目标是构建一个能够基于输入内容来生成指令的模型。这么做背后的逻辑是&#xff0c;模型如…...

VUE 全局设置防重复点击

请求后端防止重复点击&#xff0c;用户点击加入遮罩层&#xff0c;请求完毕关闭遮罩层 我们利用请求拦截器&#xff0c;在用户点击的时候&#xff0c;弹出遮罩层 本文采用i18n国际化 element plus UI&#xff0c;提取你想要的&#xff0c;这里不做简化 完整代码如下&#xf…...

备战蓝桥杯---动态规划(基础1)

先看几道比较简单的题&#xff1a; 直接f[i][j]f[i-1][j]f[i][j-1]即可&#xff08;注意有马的地方赋值为0&#xff09; 下面是递推循环方式实现的AC代码&#xff1a; #include<bits/stdc.h> using namespace std; #define int long long int a[30][30]; int n,m,x,y; …...

CVE-2018-19518 漏洞复现

CVE-2018-19518 漏洞介绍 IMAP协议&#xff08;因特网消息访问协议&#xff09;它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息&#xff0c;下载邮件等。它运行在TCP/IP协议之上&#xff0c;使用的端口是143。在php中调用的是imap_open函数。 PHP 的…...

Python爬虫实战:抓取猫眼电影排行榜top100#4

爬虫专栏系列&#xff1a;http://t.csdnimg.cn/Oiun0 抓取猫眼电影排行 本节中&#xff0c;我们利用 requests 库和正则表达式来抓取猫眼电影 TOP100 的相关内容。requests 比 urllib 使用更加方便&#xff0c;而且目前我们还没有系统学习 HTML 解析库&#xff0c;所以这里就…...

Fiddler抓包工具之fiddler界面工具栏介绍

Fiddler界面工具栏介绍 &#xff08;1&#xff09;WinConfig&#xff1a;windows 使用了一种叫做“AppContainer”的隔离技术&#xff0c;使得一些流量无法正常捕获&#xff0c;在 fiddler中点击 WinConfig 按钮可以解除这个诅咒&#xff0c;这个与菜单栏 Tools→Win8 Loopback…...

LabVIEW工业监控系统

LabVIEW工业监控系统 介绍了一个基于LabVIEW软件开发的工业监控系统。系统通过虚拟测控技术和先进的数据处理能力&#xff0c;实现对工业过程的高效监控&#xff0c;提升系统的自动化和智能化水平&#xff0c;从而满足现代工业对高效率、高稳定性和低成本的需求。 随着工业自…...

Linux 文件连接:符号链接与硬链接

Linux 文件连接&#xff1a;符号链接与硬链接 介绍 在 Linux 系统中&#xff0c;文件连接是一个强大的概念&#xff0c;它允许我们在文件系统中创建引用&#xff0c;从而使得文件和目录之间产生联系。在本文中&#xff0c;我们将深入探讨两种主要类型的文件连接&#xff1a;符…...

数据分类分级

一段时间没写文章了&#xff0c;最近做政府数据治理方面的项目&#xff0c;数据治理一个重要的内容是数据安全&#xff0c;会涉及数据的分类分级&#xff0c;是数据治理的基础。 随着“十四五”规划推行&#xff0c;数据要素概念与意识全面铺开&#xff0c;国家、政府机构、企业…...

技术经理必修管理知识:从管理到领导——高阶技术管理者的自我修养

08-技术经理必修管理知识&#xff1a;从管理到领导——高阶技术管理者的自我修养管理者正确地做事&#xff0c;领导者做正确的事。管理的终点是效率&#xff0c;领导的起点是方向。当你开始思考"我们该往哪里走"而不是"我们该怎么走快一点"&#xff0c;你就…...

RuoYi-Vue-Plus:现代化企业级开发框架的架构演进与分布式多租户解决方案

RuoYi-Vue-Plus&#xff1a;现代化企业级开发框架的架构演进与分布式多租户解决方案 【免费下载链接】RuoYi-Vue-Plus 项目地址: https://gitcode.com/GitHub_Trending/ru/RuoYi-Vue-Plus 面对企业应用开发中普遍存在的分布式架构复杂性、多租户数据隔离难题以及传统框…...

OpenClaw对接GLM-4.7-Flash:模型性能优化指南

OpenClaw对接GLM-4.7-Flash&#xff1a;模型性能优化指南 1. 为什么需要专门优化GLM-4.7-Flash的对接&#xff1f; 上个月我在本地部署了OpenClawGLM-4.7-Flash组合&#xff0c;原本期待它能流畅处理我的自动化办公需求&#xff0c;结果遭遇了典型的"水土不服"症状…...

如何在ESXi 6.7上完美驱动Realtek RTL8125网卡:完整编译与部署指南

如何在ESXi 6.7上完美驱动Realtek RTL8125网卡&#xff1a;完整编译与部署指南 【免费下载链接】r8125-esxi Realtek RTL8125 driver for ESXi 6.7 项目地址: https://gitcode.com/gh_mirrors/r8/r8125-esxi 想要在VMware ESXi 6.7服务器上使用Realtek RTL8125网卡&…...

《90%考生不知道的蓝桥杯Web提分秘籍!这本书让我一个月逆袭省一》

《90%考生不知道的蓝桥杯Web提分秘籍&#xff01;这本书让我一个月逆袭省一》 文章目录 《90%考生不知道的蓝桥杯Web提分秘籍&#xff01;这本书让我一个月逆袭省一》Part.1为什么蓝桥杯大赛能吸引百万考生&#xff1f;Part.2《Web应用开发竞赛真题实战特训教程 图解版》《程序…...

从0开始的SPSS数据分析:基础概念与核心检验实战

1. 认识SPSS与数据分析基础 第一次打开SPSS时&#xff0c;很多人会被密密麻麻的菜单栏吓到。别担心&#xff0c;这就像刚拿到新手机需要熟悉界面一样正常。SPSS&#xff08;Statistical Package for the Social Sciences&#xff09;本质上是个"统计计算器"&#xff…...

特征选择避坑指南:Relief与ReliefF算法的区别与适用场景全解析

特征选择避坑指南&#xff1a;Relief与ReliefF算法的区别与适用场景全解析 在数据科学项目中&#xff0c;特征选择往往是决定模型性能的关键环节。面对成百上千的特征变量&#xff0c;如何高效筛选出真正有价值的特征&#xff1f;Relief系列算法以其直观的权重计算和高效的运行…...

AI报告文档审核护航飞行安全:IACheck打造航电与飞控检测报告智能审核新利器

在航空领域&#xff0c;航电系统与飞控系统被誉为飞行器的“大脑”和“神经中枢”。航电系统负责信息处理与通信导航&#xff0c;飞控系统则负责飞行姿态控制与稳定执行。两者协同运行&#xff0c;直接关系到飞行安全与任务成败。在如此高安全要求的领域中&#xff0c;任何细微…...

数字孪生城市入门:SuperMap和MapGIS怎么选?聊聊地下管线三维建模的两种技术路线

数字孪生城市技术选型&#xff1a;SuperMap与MapGIS地下管线建模深度对比 当城市开始拥有自己的"数字双胞胎"&#xff0c;地下管线作为看不见的"生命线"如何被精准复刻到虚拟世界&#xff1f;这个问题正困扰着越来越多的智慧城市项目决策者。在数字孪生城市…...

避坑指南:Arduino驱动直流电机和舵机时,PWM信号那些容易翻车的事儿

Arduino电机控制避坑实战&#xff1a;PWM信号那些教科书没讲的细节 当你的Arduino风扇项目需要手动拨动叶片才能启动&#xff0c;或者舵机像得了帕金森一样不停抖动时&#xff0c;别急着怀疑人生——这可能是PWM信号在作祟。作为经历过无数电机控制翻车现场的老司机&#xff0c…...