当前位置: 首页 > 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加载更多内容的界面时很有用。

✨ 结语

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

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

http://www.lryc.cn/news/297069.html

相关文章:

  • 4.0 Zookeeper Java 客户端搭建
  • C#既然数组长度不可改变,那么如何动态调整集合类型数组大小,以便添加或删除元素?
  • 3.1 Verilog 连续赋值
  • 【http】2、http request header Origin 属性、跨域 CORS、同源、nginx 反向代理、预检请求
  • LangChain pdf的读取以及向量数据库的使用
  • VUE学习——事件修饰符
  • 开放平台技术架构设计与实现的实战总结
  • 飞桨自然语言处理框架 paddlenlp的 trainer
  • SQL世界之命令语句Ⅲ
  • Snoop Version 2 Packet Capture File Format
  • 扩展说明: 指令微调 Llama 2
  • VUE 全局设置防重复点击
  • 备战蓝桥杯---动态规划(基础1)
  • CVE-2018-19518 漏洞复现
  • Python爬虫实战:抓取猫眼电影排行榜top100#4
  • Fiddler抓包工具之fiddler界面工具栏介绍
  • LabVIEW工业监控系统
  • Linux 文件连接:符号链接与硬链接
  • 数据分类分级
  • 第三十天| 51. N皇后
  • pythn-scipy 查漏补缺
  • 【JavaScript 漫游】【013】Date 对象知识点摘录
  • vue.config.js和webpack.config.js区别
  • H12-821_73
  • postman执行批量测试
  • 蓝桥杯基础知识8 list
  • 【DDD】学习笔记-理解领域模型
  • v-if 和v-show 的区别
  • LabVIEW网络测控系统
  • 攻防世界 CTF Web方向 引导模式-难度1 —— 11-20题 wp精讲