JS滚动监听怎么实现_JS页面滚动事件监听与交互效果方法

掌握页面滚动监听核心方法:基础使用scroll事件配合节流优化,通过getBoundingClientRect判断元素可见性,推荐Intersection Observer API实现高性能懒加载与动画触发。

js滚动监听怎么实现_js页面滚动事件监听与交互效果方法

页面滚动监听在现代前端开发中非常常见,比如实现懒加载图片、吸顶导航、滚动进度条或视差动画等效果。JavaScript 提供了多种方式来监听页面滚动行为,并结合交互逻辑提升用户体验。

1. 使用 scroll 事件监听滚动

最基础的方式是通过 window.addEventListener(‘scroll’, …) 监听窗口滚动事件。

每次用户滚动页面时,该事件都会触发,可以获取当前滚动位置并执行相应操作。

示例:实时获取滚动位置

window.addEventListener('scroll', function() {  const scrollTop = window.pageYOffset || document.documentElement.scrollTop;  console.log('当前滚动高度:', scrollTop);});

注意:scroll 事件可能频繁触发,建议对回调函数进行防抖(debounce)或节流(throttle)处理,避免性能问题。

添加简单节流优化

function throttle(func, delay) {  let inThrottle;  return function() {    if (!inThrottle) {      func.apply(this, arguments);      inThrottle = true;      setTimeout(() => inThrottle = false, delay);    }  };}window.addEventListener('scroll', throttle(function() {  const scrollTop = window.pageYOffset;  // 执行滚动相关逻辑}, 100));

2. 判断元素是否进入视口

很多交互效果需要知道某个元素是否已经出现在可视区域内,例如“滚动到某区域时播放动画”。

使用 getBoundingClientRect 判断元素位置

const element = document.querySelector('.animate-item');function isElementInViewport(el) {  const rect = el.getBoundingClientRect();  return (    rect.top = 0  );}

上面代码表示当元素顶部距离视口顶部小于等于视口高度的80%,且底部未完全移出视口时,认为其“可见”。

结合 scroll 事件实现懒加载或动画触发

window.addEventListener('scroll', throttle(function() {  if (isElementInViewport(element)) {    element.classList.add('active'); // 触发动画类  }}, 100));

3. 使用 Intersection Observer API(推荐)

这是现代浏览器提供的更高效、性能更好的滚动监听方案,特别适合用于懒加载、无限滚动和元素可见性检测。

基本用法示例:监听元素进入视口

const observer = new IntersectionObserver((entries) => {  entries.forEach(entry => {    if (entry.isIntersecting) {      entry.target.classList.add('visible');      // 可选:只触发一次后取消监听      observer.unobserve(entry.target);    }  });}, {  threshold: 0.1 // 当元素10%可见时触发});// 开始观察目标元素observer.observe(document.querySelector('.fade-in'));

相比 scroll 事件轮询,Intersection Observer 是异步的,不会阻塞渲染,性能更优。

常见应用场景:

图片懒加载:图片进入视口再加载 src内容动画:滚动到模块时播放 fade-in 效果广告曝光统计:确保元素真正被看到才计数

4. 常见交互效果实现思路

基于滚动监听,可以轻松实现以下效果:

吸顶导航栏

const nav = document.querySelector('nav');const offsetTop = nav.offsetTop;window.addEventListener('scroll', () => {  if (window.pageYOffset >= offsetTop) {    nav.classList.add('fixed');  } else {    nav.classList.remove('fixed');  }});

CSS 配合 .fixed { position: fixed; top: 0; width: 100%; }

滚动进度条

const progressBar = document.querySelector('.progress');window.addEventListener('scroll', () => {  const totalHeight = document.body.scrollHeight - window.innerHeight;  const progress = (window.pageYOffset / totalHeight) * 100;  progressBar.style.width = progress + '%';});

基本上就这些。核心是掌握 scroll 事件与 Intersection Observer 的使用场景:简单需求可用 scroll + 节流,复杂或高性能要求推荐用 Intersection Observer。

以上就是JS滚动监听怎么实现_JS页面滚动事件监听与交互效果方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1535420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 02:25:52
下一篇 2025年12月21日 02:26:05

相关推荐

  • 把css放在HTML的哪里

    HTML中放置css的位置:1、把css放在HTML标签的style属性中,语法“”,css代码可以是一个或多个由分号分隔的CSS属性和值;2、将css代码放在HTML head部分的“”标签对中,语法“css代码”。 本教程操作环境:windows7系统、CSS3&&HTML5版、…

    2025年12月21日 好文分享
    000
  • html里js怎么使用

    html里js的使用方法:1、在HTML中使用【】嵌入JavaScript,在使用【】包含外部文件时使用src属性;2、所有【】元素都应该放在页面的元素中。 本教程操作环境:windows7系统、html 4.01版,DELL G3电脑。 html里js的使用方法: 1、元素 在HTML中使用嵌入J…

    2025年12月21日
    000
  • html如何给段落加粗

    在html中给段落加粗的方法:1、使用“”或者“”标签包裹住段落文字;2、给段落标签(例p)设置“font-weight:bold|bolder;”样式即可,font-weight属性设置文本的粗细。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑…

    2025年12月21日
    000
  • 快速使用svg画出精美动画!

    经常在Codepen上看到大侠们用SVG画出不可思议的动画,我一直很好奇他们是怎么运作的,总觉得这需要对SVG有足够透彻的了解,并且自己画出那些SVG图案,才有办法让他动起来。 但其实不然,今天教大家一个简单的小技巧,让你快速实现一个svg动画! 打开Codepen,点击界面中的build按钮,就可…

    2025年12月21日 好文分享
    000
  • a标签怎么去掉下划线

    去掉a标签下划线的方法:使用text-decoration属性,在a标签中设置“text-decoration”属性的值为“none”即可;具体语法格式“a {text-decoration: none;}”。 本文操作环境:宏基s40-51、css3&&html5&&amp…

    2025年12月21日 好文分享
    000
  • H5+JS实现页面加载动画

    本篇文章给大家介绍一下html5+javascript实现页面加载动画的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 (相关教程推荐:html教程 ) 1.使用定时器,每次都要等待。 2.根据页面加载是否完成,来判断加载动画是否退出。 document.onreadysta…

    2025年12月21日 好文分享
    000
  • 在html中嵌入js代码的方法

    如何在HTML页面中嵌入javascript代码 (学习视频分享:html视频教程) document.write(“Hello World!”); 上面的代码会在 HTML 页面中产生这样的输出: Hello World! 实例解释: 立即学习“前端免费学习笔记(深入)”; 如果需要把一段 Jav…

    2025年12月21日
    000
  • html读取不了css样式怎么办

    html读取不了css样式的解决办法:1、检查css路径并修改;2、修改css文件中指定的编码与页面统一;3、修改HTML头部的DOCTYPE声明;4、检查是否使用@import并修改即可。 本教程操作环境:windows10系统、HTML5&&CSS3版,DELL G3电脑。 推荐…

    2025年12月21日
    000
  • HTML如何加入CSS样式

    HTML加入CSS样式的方法:1、通过行内式加入CSS样式;2、通过内嵌式,把css代码放在特定页面的head部分中;3、通过外联式,使用link标签,将外部css文件链接到HTML中即可。 本教程操作环境:windows10系统、HTML5&&CSS3版,DELL G3电脑。 推荐…

    2025年12月21日
    000
  • 了解浏览器渲染网页的每个步骤机制!

    我的想法:如果我要构建快速可靠的网站,需要真正了解浏览器渲染网页的每个步骤机制,这样就可以在开发过程中对每个步骤进行优化。 这篇文章是我在较高水平上对端到端过程的学习总结。 好了,废话不多说,我们开始吧。这个过程可以分为以下几个主要阶段: 1、开始解析HTML 2、获取外部资源 3、解析 CSS 并…

    2025年12月21日 好文分享
    000
  • html获取javascript变量值的方法有哪些

    html获取javascript变量值有如下三种方法: (免费学习视频分享:html视频教程) 方法一:嵌入到html句子中,当html元素使用 var df=newDate(); var year= df.getFullYear() ; document.write(“”+year+” J2EE开…

    2025年12月21日
    000
  • 浅谈网页中提升SVG文件可访问性的几种方法

    (推荐教程:html教程) SVG是一种图像文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。本文就来为大家介绍7个提升网页SVG文件可访问性的方案。 1、作为图片使用的 SVG 文件 如果你的 SVG 是作为  的 src 引入的,务必为  添加 r…

    2025年12月21日
    000
  • 利用html+css+js实现简单的点赞效果

    我们在浏览其他网站的文章时,经常可以看到文章尾部有点赞收藏效果,非常有趣。今天我们自己动手来实现该效果。 (学习视频推荐:html视频教程) css样式 .like{ font-size:66px; color:#ccc; cursor:pointer;}.cs{color:#f00;} html内…

    2025年12月21日
    000
  • 一起了解script标签中的async和defer属性

    前端当然要从 HTML 开始,我们来聊聊在 script 标签中加上 async/defer 时的功能及差异。 都明白的道理 我们都知道,浏览器解析 HTML 是一行一行按照顺序向后读取的,在传统的写法中,当浏览器读到 时,便会暂停解析 DOM,同时立即开始下载 中定义的资源,并在下载完成后立刻执行…

    2025年12月21日
    000
  • 利用前端基础制作html开关图标

    我们先来看下效果图: (学习视频分享:html视频教程) html代码: 立即学习“前端免费学习笔记(深入)”; 开关图标 ON OFF css样式: body { text-align: center } .SwitchIcon { margin: 200px auto; } #toggle-bu…

    2025年12月21日
    000
  • 在html页面中加入js可以用什么方法

    方法一:在head标签内引入JS文件 (推荐教程:html教程) 方法二:在body标签内写JS代码 //在这里面写你的js代码 </html 以上就是在html页面中加入js可以用什么方法的详细内容,更多请关注创想鸟其它相关文章!

    2025年12月21日
    000
  • 网页开发中实用的11个文本输入和6个按钮操作特效

    文本输入特效 1.power-mode-input PowerModeInput 可以让你的文本输入框更引人注目。 地址:https://github.com/lindelof/power-mode-input 2.TextInputEffects 简单的样式和效果,可增强文本输入交互。 地址:ht…

    2025年12月21日 好文分享
    000
  • html文档中怎么把图片作为背景?

    在html中,可以通过给body标签设置css background或background-image样式来把图片作为背景,语法格式“background/background-image:url(“图片路径”);”。 (推荐教程:html教程) html文档中可以使用css…

    2025年12月21日
    000
  • 什么是对html的补充,可以使网页形式和内容分离?

    CSS是对html的补充,可以使网页形式和内容分离。css是用于增强控制网页样式并允许将样式信息与网页内容分离的一种标记性语言,它扩充了 HTML各标记的属性设定,使网页内容的视觉效果有更多变化。 层叠样式表(CSS)可以有效地对页面的布局、字体、背景、色彩和其他显示效果实现更加精确的控制。它是用于…

    2025年12月21日
    000
  • 手把手教你如何在HTML中引入外部JS文件

    在学习前端的时候,小伙伴们一定对于在HTML中如何引入外部JS文件感到困惑,下面小编教你HTML引入外部JS文件的方法。 在引入外部JS文件的情况下,不能在之间插入代码,插入的代码不执行,只执行引入的外部文件。 attack.html 代码: 系好安全带,准备启航 attack.js 代码 func…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信