JavaScript滚动事件
🧑🎓 个人主页:《爱蹦跶的大A阿》
🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》
✨ 前言
滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助我们实现许多实用的功能。
本文将详细介绍页面与元素的滚动事件,如何跟踪滚动距离,以及判断滚动到底部的方法。通过学习,相信大家可以轻松处理各种滚动需求,丰富页面交互体验。
✨ 正文
本文介绍页面和元素的滚动事件。
页面滚动
当页面滚动时,会触发 document 的 scroll 事件:
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, auto 或 overlay 的元素。
滚动到底部检查
一个常见需求是检查用户是否滚动到页面或元素底部:
// container 为可滚动元素
container.onscroll = function() {if (container.scrollTop + container.clientHeight == container.scrollHeight) {// 滚动到底部}
};
是通过对比滚动距离和总高度来判断。
scroll事件频率控制
scroll事件会高频触发,通常每100-200毫秒触发一次。这可能导致性能问题。
我们可以使用throttle或debounce来限制回调函数的调用频率:
// throttle 版
let throttleScroll = throttle(onScroll, 100);elem.addEventListener('scroll', throttleScroll);// debounce 版
let debounceScroll = debounce(onScroll, 200);elem.addEventListener('scroll', debounceScroll);
这样可以避免scroll事件过于频繁地触发处理函数。
滚动内容变化监听
有时我们需要在元素滚动范围内的内容变化时得到通知。可以监听resize和scroll事件来处理:
elem.addEventListener('resize', onResizeOrScroll);
elem.addEventListener('scroll', onResizeOrScroll);function onResizeOrScroll(){// 检查elem中内容变化
}
resize事件确保加载更多内容时也能得到通知。
这在构建滚动diffs加载更多内容的界面时很有用。
✨ 结语
滚动事件为我们提供了实时访问滚动状态的能力。合理使用可以避免过度重复渲染,优化性能。
本文不仅介绍了滚动事件的监听方法,还展示了防抖处理和监听内容变化的技巧。希望通过这个博客,大家已可以轻松应对各种滚动事件处理需求。如果还有疑问,欢迎评论区讨论。
相关文章:
JavaScript滚动事件
🧑🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ✨ 前言 滚动是网页交互不可或缺的一部分。监听页面和元素的滚动事件,可以帮助…...
4.0 Zookeeper Java 客户端搭建
本教程使用的 IDE 为 IntelliJ IDEA,创建一个 maven 工程,命名为 zookeeper-demo,并且引入如下依赖,可以自行在maven中央仓库选择合适的版本,介绍原生 API 和 Curator 两种方式。 IntelliJ IDEA 相关介绍:…...
C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?
目录 1.使用动态数组(ArrayList): 2.使用 jagged array(不规则数组): 3.使用 List : 4.使用数组复制: 在C#中,数组的长度是固定的,一旦声明和初始化&…...
3.1 Verilog 连续赋值
关键词:assign, 全加器 连续赋值语句是 Verilog 数据流建模的基本语句,用于对 wire 型变量进行赋值。: 格式如下 assign LHS_target RHS_expression ; LHS(left hand side) 指赋值操作…...
【http】2、http request header Origin 属性、跨域 CORS、同源、nginx 反向代理、预检请求
文章目录 一、Origin 含义二、跨源资源共享:**Cross-Origin Resource Sharing** CORS2.1 跨域的定义2.2 功能概述2.3 场景示例2.3.1 简单请求2.3.2 Preflighted requests:预检请求 2.4 header2.4.1 http request header2.4.1.1 Origin2.4.1.2 Access-Con…...
LangChain pdf的读取以及向量数据库的使用
以下使用了3399.pdf, 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接口和服务的平台,促进生态系统的建设和业务拓展。本文将介绍开放平台技术架构的设计原则和实现方法,帮助读者了解如何构建一个稳健、安全且易于扩展的开放平台。 1. 什么是开放平台? - 解释了开放平台…...
飞桨自然语言处理框架 paddlenlp的 trainer
飞桨(PaddlePaddle)的NLP库PaddleNLP中的Trainer类是一个用于训练和评估模型的简单但功能完整的循环。它被优化用于与PaddleNLP一起使用。Trainer类简化了训练过程,提供了自动的批处理、模型保存、日志记录等特性。 以下是Trainer类的主要参数…...
SQL世界之命令语句Ⅲ
目录 一、SQL JOIN 1.JOIN 和 Key 2.使用 JOIN 3.不同的 SQL JOIN 二、SQL INNER JOIN 关键字 1.SQL INNER JOIN 关键字 2.INNER JOIN 关键字语法 3.内连接(INNER JOIN)实例 三、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,关于指令微调 Llama 2 的扩展说明。旨在聚焦构建指令数据集,有了它,我们则可以使用自己的指令来微调 Llama 2 基础模型。 目标是构建一个能够基于输入内容来生成指令的模型。这么做背后的逻辑是,模型如…...
VUE 全局设置防重复点击
请求后端防止重复点击,用户点击加入遮罩层,请求完毕关闭遮罩层 我们利用请求拦截器,在用户点击的时候,弹出遮罩层 本文采用i18n国际化 element plus UI,提取你想要的,这里不做简化 完整代码如下…...
备战蓝桥杯---动态规划(基础1)
先看几道比较简单的题: 直接f[i][j]f[i-1][j]f[i][j-1]即可(注意有马的地方赋值为0) 下面是递推循环方式实现的AC代码: #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协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143。在php中调用的是imap_open函数。 PHP 的…...
Python爬虫实战:抓取猫眼电影排行榜top100#4
爬虫专栏系列:http://t.csdnimg.cn/Oiun0 抓取猫眼电影排行 本节中,我们利用 requests 库和正则表达式来抓取猫眼电影 TOP100 的相关内容。requests 比 urllib 使用更加方便,而且目前我们还没有系统学习 HTML 解析库,所以这里就…...
Fiddler抓包工具之fiddler界面工具栏介绍
Fiddler界面工具栏介绍 (1)WinConfig:windows 使用了一种叫做“AppContainer”的隔离技术,使得一些流量无法正常捕获,在 fiddler中点击 WinConfig 按钮可以解除这个诅咒,这个与菜单栏 Tools→Win8 Loopback…...
LabVIEW工业监控系统
LabVIEW工业监控系统 介绍了一个基于LabVIEW软件开发的工业监控系统。系统通过虚拟测控技术和先进的数据处理能力,实现对工业过程的高效监控,提升系统的自动化和智能化水平,从而满足现代工业对高效率、高稳定性和低成本的需求。 随着工业自…...
Linux 文件连接:符号链接与硬链接
Linux 文件连接:符号链接与硬链接 介绍 在 Linux 系统中,文件连接是一个强大的概念,它允许我们在文件系统中创建引用,从而使得文件和目录之间产生联系。在本文中,我们将深入探讨两种主要类型的文件连接:符…...
数据分类分级
一段时间没写文章了,最近做政府数据治理方面的项目,数据治理一个重要的内容是数据安全,会涉及数据的分类分级,是数据治理的基础。 随着“十四五”规划推行,数据要素概念与意识全面铺开,国家、政府机构、企业…...
AI驱动数字营销平台架构解析:从工作流引擎到品牌个性化
1. 项目概述:一个AI驱动的数字营销代理平台最近在GitHub上看到一个挺有意思的项目,叫windagency/valora.ai。乍一看这个仓库名,可能很多人会有点懵,这到底是做什么的?是AI工具,还是营销平台?作为…...
FCOS训练自己的数据?从Labelme标注到VOC格式转换,这份避坑指南请收好
FCOS训练自定义数据集:从Labelme标注到VOC格式的完整避坑指南 当你已经用Labelme完成了图像标注,却卡在数据格式转换这一步时,这篇文章将成为你的救星。FCOS作为一款优秀的全卷积目标检测模型,对输入数据格式有着严格的要求&#…...
Perplexity引用溯源失效的5个致命盲区:从数据管道到渲染层的全链路修复手册
更多请点击: https://intelliparadigm.com 第一章:Perplexity引用透明度优化的底层逻辑与设计哲学 Perplexity 作为衡量语言模型输出不确定性的核心指标,其引用透明度(Referential Transparency)并非天然具备——当同…...
Claude API预算与性能优化实战:四层策略降本增效
1. 项目概述:一个为Claude设计的预算与性能优化技能 最近在折腾Claude API的时候,发现了一个挺有意思的开源项目,叫 budget_and_performance_optimization_claude_skill 。简单来说,这是一个专门为Claude(特别是Clau…...
IP定位系统源码二开版 新增分销功能 PHP地理位置查询系统
概述 在大数据与精准营销时代,获取访问者的地理位置信息已成为许多业务场景(如广告推广、安全风控、用户画像分析)的核心需求。为了帮助开发者快速搭建此类服务,幽络源源码网特别分享这款IP定位系统源码二开版。这是一套基于PHP开…...
Eviews面板数据建模保姆级教程:从Hausman检验到模型选择,一次讲透固定效应与随机效应
Eviews面板数据建模实战指南:从数据导入到模型选择的完整流程 面板数据分析作为计量经济学中的重要工具,能够同时捕捉时间和个体维度的信息。对于刚接触Eviews的研究者来说,如何正确建立面板模型往往令人困惑——从数据准备到模型选择&#x…...
STM32CubeMX实战指南:ADC多通道扫描与DMA传输配置
1. ADC多通道扫描与DMA传输的核心价值 第一次用STM32做多路传感器采集时,我像大多数新手一样傻傻地用轮询方式读取每个ADC通道。结果发现CPU利用率直接飙到80%,系统卡得连LED灯都闪不利索。后来工程师老张甩给我一句话:"用DMA啊…...
STM32CubeMX配置I2C驱动ADS1115,从零开始实现高精度电压采集(附完整工程源码)
STM32CubeMX配置I2C驱动ADS1115:从零实现工业级电压采集系统 在嵌入式开发中,高精度模拟信号采集一直是工程师面临的挑战。当我们需要测量微弱电压信号或实现多通道同步采集时,STM32内置ADC往往难以满足精度要求。本文将手把手教你使用STM32C…...
AI技能白日梦:让大模型通过自主推演实现能力进化
1. 项目概述:当AI学会“白日做梦”最近在GitHub上看到一个挺有意思的项目,叫regiep4/skill-daydreaming。光看这个名字,就让人浮想联翩——“技能白日梦”?这听起来不像是一个传统的工具库或者框架,更像是一种对AI能力…...
别再手动写CSS了!用Vue3 + Tailwind CSS 5分钟搞定一个响应式卡片组件
用Vue3与Tailwind CSS极速构建响应式卡片组件的实战指南 前端开发领域正在经历一场效率革命。过去需要数小时才能完成的UI组件开发,如今借助现代工具链可以在几分钟内实现。本文将带你体验如何通过Vue3的单文件组件特性与Tailwind CSS的实用优先(Utility-First)方法…...
