当前位置:

首页 > 编程开发 > JavaScript监听鼠标滚轮(监听向上/向下滑动)事件的完整指南

JavaScript监听鼠标滚轮(监听向上/向下滑动)事件的完整指南

鼠标滚轮事件监听常用标准wheel事件,通过event.deltaY正负判断滚动方向:负值向上,正值向下。阻止默认滚动需调用preventDefault,但应谨慎使用以免影响正常浏览体验。

本文目录

    在 Web 开发里,监听鼠标滚轮事件算是一个非常实用的技能——无论是做滚动加载、图片缩放,还是幻灯片切换,都离不开它。很多新手在接触这个功能时,往往会被 mousewheel 和 wheel 搞晕,或者不知道怎么判断向上还是向下。其实核心逻辑并不复杂,关键是抓住几个关键属性,然后根据场景灵活处理。下面就把这个事儿彻底捋清楚。

    Ja vaScript监听鼠标滚轮(监听向上/向下滑动)事件的完整指南

    1. 鼠标滚轮事件的基本概念

    现在的标准事件是 wheel,它在用户滚动鼠标滚轮时触发。相比老旧的 mousewheel,wheel 能提供更精细的数据——比如滚动方向、滚动距离,甚至支持触控板的平滑滚动。所以除非你需要兼容 IE 这种古董浏览器,否则直接上 wheel 就对了。

    判断方向最关键的属性是 deltaY:

    • deltaY > 0 → 向下滚动(或者向右,取决于设备设置,但绝大多数情况是向下)
    • deltaY < 0 → 向上滚动

    另外还有 deltaX(水平滚动)和 deltaZ(3D 滚轮),不过日常开发中基本用不上。

    2. 基本实现:监听 wheel 事件

    直接挂一个事件监听器,然后在回调里判断 deltaY 的正负值,就能区分方向了。代码非常精简:

    document.addEventListener('wheel', (event) => {
        if (event.deltaY < 0) {
            console.log('向上滚动');
            // 执行向上滚动的逻辑
        } else if (event.deltaY > 0) {
            console.log('向下滚动');
            // 执行向下滚动的逻辑
        }
    });

    有几个细节需要注意:

    • event.preventDefault() 可以阻止页面默认的滚动行为,但一定要谨慎——如果你禁用了滚动,用户可能无法正常浏览页面。通常只在自定义滚动容器或幻灯片场景下使用。
    • 如果你确实需要兼容老掉牙的浏览器(比如 IE 11 以下),可以再额外监听 mousewheel 事件,不过现在大部分项目已经不需要了。

    3. 完整示例:阻止默认滚动 + 自定义逻辑

    来一个直观的例子:假设我们用滚轮切换一个幻灯片,并且不希望页面跟着滚动。这里用三个简单的 div 模拟幻灯片,通过 translateY 实现切换动画。直接上可运行的 HTML:

    
    
    
        
        
        鼠标滚轮事件示例
        
    
    
        
    Slide 1
    Slide 2
    Slide 3

    代码拆解一下:

    1. HTML 结构:一个 .slider 容器,内部堆叠了三张 .slide 幻灯片,利用 position: absolute 让它们重叠。
    2. CSS 动画:给每个幻灯片加了 transition: transform 0.5s ease,切换时就有平滑过渡效果。
    3. Ja vaScript 逻辑:wheel 事件里先 event.preventDefault() 拦下页面滚动,然后根据 deltaY 更新 currentSlide,最后调用 updateSlider() 通过 translateY 偏移来实现显示哪一张。

    这个示例可以直接复制到本地跑一下,效果还是挺直观的。

    4. 兼容性处理

    既然提到了兼容性,就多说一句。如果你确实需要支持 IE 或一些老版本的 Edge,可以同时监听 mousewheel(注意 mousewheel 的 wheelDelta 方向与 deltaY 相反,数值也需要标准化):

    document.addEventListener('wheel', handleWheel);
    document.addEventListener('mousewheel', handleWheel); // 旧浏览器兼容
    
    function handleWheel(event) {
        // 标准化 deltaY(mousewheel 的 wheelDelta 方向相反)
        const delta = event.deltaY || -event.wheelDelta;
        if (delta < 0) {
            console.log('向上滚动');
        } else if (delta > 0) {
            console.log('向下滚动');
        }
    }

    不过说真的,除非你的项目要兼容 IE10 以下,否则直接只用 wheel 完全够用了——现在主流浏览器都已经支持得很好了。

    5. 实际应用场景

    除了上面演示的幻灯片切换,滚轮事件还能用在很多地方:

    • 无限滚动加载:比如微博、抖音那种往下滑就自动加载更多内容。
    • 缩放元素:地图、图片查看器里经常用滚轮放大缩小。
    • 自定义滚动条:一些轻量级的滚动容器会自己接管滚动逻辑。
    • 视差滚动效果:页面滚动时不同元素以不同速度移动,制造空间感。

    每个场景的实现细节可能有差别,但判断方向的核心思路都是一样的。

    6. 总结

    • 用 addEventListener('wheel', callback) 监听滚轮事件。
    • 通过 event.deltaY 的正负判断方向:负值向上,正值向下。
    • 需要阻止默认滚动时,调用 event.preventDefault(),但注意不要滥用。
    • 如果需要兼容老浏览器,可以额外监听 mousewheel,但推荐在新项目中直接使用标准 wheel 事件。

    最后给一个最简洁的核心代码片段,方便直接复制使用:

    document.addEventListener('wheel', (event) => {
        if (event.deltaY < 0) {
            console.log('向上滚动');
            // 自定义逻辑(如切换上一张幻灯片)
        } else if (event.deltaY > 0) {
            console.log('向下滚动');
            // 自定义逻辑(如切换下一张幻灯片)
        }
    });
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 JavaScript
    相关文章 更多
    JS中Math.round与toFixed实现四舍五入的区别
    JS中Math.round与toFixed实现四舍五入的区别

    深入解析JavaScript中Math.round与toFixed的核心差异:前者返回数字,后者返回字符串。揭示IEEE 754浮点数导致的1.005舍入错误,提供前端显示与后端结算的最佳实践方案,包括使用分为单位整数和decimal.js库。

    JS实现指定小数位标准四舍五入函数
    JS实现指定小数位标准四舍五入函数

    解决JavaScript中1.005四舍五入为1.00而非1.01的精度问题。深入分析IEEE 754双精度浮点数表示误差,提供健壮的roundTo函数实现,涵盖NaN、Infinity及负数处理。对比toFixed与自定义方案,明确显示与结算的场景边界,附带边界用例验证表。

    JS toFixed四舍五入不准的修正方法
    JS toFixed四舍五入不准的修正方法

    深入解析JavaScript中toFixed方法四舍五入不准确的根本原因,提供基于指数表示法与数字偏移的安全修正方案,并配有直观架构图与对比示例。

    JS刷新页面:location.reload()与location.href的核心区别
    JS刷新页面:location.reload()与location.href的核心区别

    详解JavaScript中location.reload()和location.href刷新页面的机制差异。对比两者在HTTP缓存验证、POST请求重复提交警告、浏览器历史记录栈行为上的不同,并提供绕过强缓存、处理Hash变化及避免死循环的实战代码示例。

    typescript是什么语言?一文看懂其定义与用途
    typescript是什么语言?一文看懂其定义与用途

    深入浅出解析TypeScript是什么语言。本文详细介绍TypeScript的语言定义、超集架构、核心运行原理、与JavaScript的核心对比以及四类典型工业级应用场景,帮助读者全面看懂TS的价值与用途。

    JS金额计算怎么避免四舍五入误差
    JS金额计算怎么避免四舍五入误差

    解决JavaScript中0.1+0.2!=0.3的精度问题。深入解析IEEE 754浮点数机制,对比展示用toFixed与结算用整数分计算的适用场景,提供decimal.js库的正确用法与验证方法,帮助开发者在电商与金融场景中实现精确的金额处理。

    uniapp网络请求拦截怎么办解决方法教程
    uniapp网络请求拦截怎么办解决方法教程

    学习如何在UniApp项目中封装网络请求拦截器,实现自动携带Token、统一错误处理和请求日志记录,提升代码维护效率。

    前端文件上传接口怎么传使用FormData提交文件教程
    前端文件上传接口怎么传使用FormData提交文件教程

    详解如何使用原生 JavaScript 和 FormData 对象实现前端文件上传,涵盖单文件、多文件提交及进度监听,无需依赖重型库,提升代码可控性。

    为什么vivo浏览器内核不支持某些最新的JavaScript语法?
    为什么vivo浏览器内核不支持某些最新的JavaScript语法?

    vivo浏览器因系统级冻结WebView内核,版本锁定在89.0.4389.105及以下,不支持可选链、逻辑赋值等ES2022+新语法。可通过chrome://version确认内核版本。临时方案:使用Babel转译代码,或改用KiwiBrowser、CometAI浏览器(自带Polyfill注入)。

    前端:JavaScript中的二叉树算法实现
    前端:JavaScript中的二叉树算法实现

    圣诞快乐接下来,咱们一起深入探讨一下js数据结构中的树。其实呀,这里的树和现实生活中的树很相似,都有树干、树枝。而在程序里,树可是一种非常重要的数据结构哦,对于存储那些需要快速查找的数据来说,它简直太有用啦!它是一种分层数据的抽象模型。一个树结构包含了一系列具有父子关系的节点。每个节点都有一个父节点

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。