在JavaScript中监听鼠标滚动事件的两种方法及优化技巧

 更新时间:2026年03月19日 08:24:10   作者:Never_Satisfied  
在网页制作中,监听鼠标滚动通常有两种含义:一是监听页面或元素的滚动(scroll 事件),二是监听鼠标滚轮的具体操作(wheel 事件),下面分别介绍这两种方法以及常见的优化技巧,需要的朋友可以参考下

引言

在网页制作中,监听鼠标滚动通常有两种含义:一是监听页面或元素的滚动scroll 事件),二是监听鼠标滚轮的具体操作wheel 事件)。下面分别介绍这两种方法以及常见的优化技巧。

1. 监听页面滚动(scroll 事件)

当用户滚动窗口或某个可滚动元素时,scroll 事件会被触发。适用于检测滚动位置、实现懒加载、吸顶效果等。

基本用法

// 监听整个窗口的滚动
window.addEventListener('scroll', function(event) {
    console.log('页面滚动了');
    // 获取滚动距离
    console.log('scrollY:', window.scrollY);   // 垂直滚动距离
    console.log('scrollX:', window.scrollX);   // 水平滚动距离
});

监听特定元素的滚动

const box = document.querySelector('.scrollable-box');
box.addEventListener('scroll', function() {
    console.log('元素滚动了', box.scrollTop);
});

注意事项

  • scroll 事件触发非常频繁,若在回调中执行复杂操作(如 DOM 操作、网络请求),可能导致性能问题。
    解决方案:使用 requestAnimationFrame节流(throttle) 来控制执行频率。
// 节流函数示例(使用 lodash 或自己实现)
function throttle(fn, delay) {
    let timer = null;
    return function(...args) {
        if (!timer) {
            timer = setTimeout(() => {
                fn.apply(this, args);
                timer = null;
            }, delay);
        }
    };
}

window.addEventListener('scroll', throttle(() => {
    console.log('节流后的滚动处理');
}, 100));

2. 监听鼠标滚轮 操作(wheel 事件)

wheel 事件在用户滚动鼠标滚轮或触摸板滑动时触发,能获取滚动的方向、距离等详细信息,适用于自定义滚动效果、缩放等。

基本用法

window.addEventListener('wheel', function(event) {
    console.log('滚轮事件', event);
    // 滚轮方向
    console.log('deltaY:', event.deltaY); // 垂直滚动量(正数向下,负数向上)
    console.log('deltaX:', event.deltaX); // 水平滚动量
    console.log('deltaZ:', event.deltaZ);
    
    // 可阻止默认滚动行为(谨慎使用)
    // event.preventDefault();
}, { passive: false }); // 如果需要 preventDefault,必须设置 passive: false

注意

  • wheel 事件也是高频触发,同样建议节流。
  • 现代浏览器中,wheel 事件的 passive 选项默认为 true(提升滚动性能),此时调用 preventDefault() 无效。若必须阻止默认行为,需显式设置 { passive: false }

3. 旧版浏览器兼容(已很少用)

早期浏览器使用 mousewheel 事件(非标准),可用以下代码兼容:

document.addEventListener('mousewheel', function(event) {
    // 类似 wheel,但属性可能不同
});

但现代浏览器均已支持 wheel 事件,一般无需兼容。

总结

场景推荐事件说明
检测滚动位置(视口/元素)scroll适用于懒加载、导航栏变化等
检测滚轮滚动方向和力度wheel适用于自定义滚动、缩放、视差效果

两者都可以通过 addEventListener 绑定,并根据需要添加节流优化。

到此这篇关于在JavaScript中监听鼠标滚动事件的两种方法及优化技巧的文章就介绍到这了,更多相关JavaScript监听鼠标滚动事件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript之appendChild、insertBefore和insertAfter使用说明

    JavaScript之appendChild、insertBefore和insertAfter使用说明

    这几天需要用到对HTML节点元素的删/插操作,由于用到insertBefore方法的时候遇到了一些麻烦,现在作为知识的整理,分别对appendChild、insertBefore和insertAfter做个总结
    2010-12-12
  • RequireJS简易绘图程序开发

    RequireJS简易绘图程序开发

    这篇文章主要为大家详细介绍了使用RequireJS简易绘图程序开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 关于ECMAScript中的原始值和引用值详解

    关于ECMAScript中的原始值和引用值详解

    在ECMAScript中,变量可以存在两种类型的值,即原始值和引用,这篇这篇文章主要给大家介绍了关于ECMAScript中的原始值和引用值的相关资料,需要的朋友可以参考下
    2021-08-08
  • JS前端面试题详解之手写bind

    JS前端面试题详解之手写bind

    这篇文章主要为大家介绍了JavaScript前端面试题中常出现的问题:如何用JavaScript来实现内置的bind方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-07-07
  • Javascript基础之数组的使用

    Javascript基础之数组的使用

    这篇文章主要介绍了Javascript基础之数组的使用的相关资料,介绍的非常详解,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • 浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)

    浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)

    下面小编就为大家分享一篇浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • js基础之DOM中元素对象的属性方法详解

    js基础之DOM中元素对象的属性方法详解

    下面小编就为大家带来一篇js基础之DOM中元素对象的属性方法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • JavaScript数组filter方法

    JavaScript数组filter方法

    filter()创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,这篇文章主要介绍了JavaScript数组filter方法,需要的朋友可以参考下
    2022-12-12
  • js实现mp3录音通过websocket实时传送+简易波形图效果

    js实现mp3录音通过websocket实时传送+简易波形图效果

    这篇文章主要介绍了js实现mp3录音通过websocket实时传送+简易波形图效果,本文通过实例代码给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JS常见面试试题总结【去重、遍历、闭包、继承等】

    JS常见面试试题总结【去重、遍历、闭包、继承等】

    这篇文章主要介绍了JS常见面试试题,总结分析了javascript去重、遍历、闭包、继等相关算法与操作技巧,需要的朋友可以参考下
    2019-08-08

最新评论