当前位置: 首页 > news >正文

JavaScript 鼠标滚轮事件详解:监听向上/向下滑动

在 Web 开发中,监听鼠标滚轮事件(wheel)可以实现许多交互效果,例如滚动加载内容缩放元素切换幻灯片等。本文将详细介绍如何使用 JavaScript 监听鼠标滚轮的向上滑动向下滑动事件,并提供完整的代码示例。


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

鼠标滚轮事件(wheel)在用户滚动鼠标滚轮时触发。与传统的mousewheel事件不同,wheel是现代浏览器的标准事件,支持更精细的滚轮数据(如deltaY)。

关键属性

  • deltaY:表示垂直滚动的方向和距离。
    • deltaY > 0:向滚动(或向右滚动,取决于设备)。
    • deltaY < 0:向滚动(或向左滚动)。
  • deltaX:表示水平滚动的方向和距离(较少使用)。
  • deltaZ:表示 3D 滚轮的滚动(较少使用)。

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

我们可以使用addEventListener监听wheel事件,并通过event.deltaY判断滚动方向。

示例代码

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

说明

  • event.preventDefault()可以阻止默认滚动行为(如页面滚动),但需谨慎使用,否则会影响用户体验。
  • 如果需要兼容旧浏览器(如 IE),可以同时监听mousewheel事件(但现代浏览器已弃用)。

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

假设我们希望在滚动时阻止页面默认滚动,并执行自定义逻辑(如切换幻灯片):

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>鼠标滚轮事件示例</title><style>body{height:200vh;/* 模拟长页面 */margin:0;display:flex;justify-content:center;align-items:center;font-family:Arial,sans-serif;}.slider{width:500px;height:300px;background-color:#f0f0f0;border-radius:8px;display:flex;justify-content:center;align-items:center;font-size:24px;position:relative;overflow:hidden;}.slide{position:absolute;width:100%;height:100%;display:flex;justify-content:center;align-items:center;transition:transform 0.5s ease;}</style></head><body><divclass="slider"><divclass="slide"style="background-color:#ffcccc;">Slide 1</div><divclass="slide"style="background-color:#ccffcc;">Slide 2</div><divclass="slide"style="background-color:#ccccff;">Slide 3</div></div><script>constslides=document.querySelectorAll('.slide');letcurrentSlide=0;// 初始化:只显示第一张幻灯片updateSlider();document.addEventListener('wheel',(event)=>{// 阻止默认滚动行为event.preventDefault();if(event.deltaY<0){// 向上滚动:上一张currentSlide=(currentSlide-1+slides.length)%slides.length;}elseif(event.deltaY>0){// 向下滚动:下一张currentSlide=(currentSlide+1)%slides.length;}updateSlider();});functionupdateSlider(){slides.forEach((slide,index)=>{slide.style.transform=`translateY(${(index-currentSlide)*100}%)`;});}</script></body></html>

代码解析

  1. HTML 结构
    • 一个.slider容器,包含 3 张.slide幻灯片。
  2. CSS 样式
    • 使用position: absolute堆叠幻灯片。
    • transition实现平滑切换效果。
  3. JavaScript 逻辑
    • 监听wheel事件,阻止默认滚动(event.preventDefault())。
    • 根据deltaY判断滚动方向,更新currentSlide索引。
    • updateSlider()函数通过transform: translateY()切换幻灯片。

4. 兼容性处理

虽然wheel是现代标准,但旧浏览器(如 IE)可能不支持。如果需要兼容,可以同时监听mousewheel(但推荐仅在必要时使用):

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

5. 实际应用场景

  1. 滚动加载内容(如无限滚动列表)。
  2. 缩放元素(如地图、图片查看器)。
  3. 切换幻灯片/轮播图(如本文示例)。
  4. 自定义滚动行为(如平滑滚动、视差效果)。

6. 总结

  • 使用addEventListener('wheel', callback)监听鼠标滚轮事件。
  • 通过event.deltaY判断滚动方向(< 0向上,> 0向下)。
  • 可使用event.preventDefault()阻止默认滚动行为。
  • 兼容旧浏览器时,可额外监听mousewheel(但不推荐)。

完整代码(推荐)

document.addEventListener('wheel',(event)=>{if(event.deltaY<0){console.log('向上滚动');// 自定义逻辑(如切换上一张幻灯片)}elseif(event.deltaY>0){console.log('向下滚动');// 自定义逻辑(如切换下一张幻灯片)}});

希望本文能帮助你掌握 JavaScript 鼠标滚轮事件的使用!如果有任何问题,欢迎在评论区讨论 🚀。

http://www.jsqmd.com/news/771654/

相关文章:

  • 2026年高精度便携式超声波流量计品牌口碑与厂家实力介绍 - 品牌推荐大师1
  • 蓝桥杯单片机备赛:用NE555测频率,从原理图到代码的避坑实操
  • 2026年素材网站选购指南:实测5款优质平台,告别选型焦虑 - 极欧测评
  • 温岭市大溪致翔机械设备租赁:专业的台州吊车租赁公司 - LYL仔仔
  • 基于Next.js与GitHub Pages构建个人开发者门户:从SSG到CI/CD全流程实践
  • 拆解特斯拉Autopilot与比亚迪DiPilot:主流车企的ADAS方案到底有何不同?
  • OR-Tools:如何用Google的运筹学引擎解决现实世界优化难题?
  • 【IEEE出版、高校联合主办、启动评优】第八届物联网、自动化和人工智能国际学术会议(IoTAAI 2026)
  • 别再只写累加和了!汽车CAN总线通信中,这几种Checksum算法你都知道吗?
  • 2026最新 海口代理记账公司排行:合规与服务能力实测盘点 - 奔跑123
  • 广东佛山心理机构怎么选?4家正规心理咨询中心测评对比 - 野榜数据排行
  • 5分钟快速指南:使用WeakAuras Companion告别繁琐的手动更新
  • Obsidian Tasks:5步掌握任务优先级管理,让重要事项不再遗漏
  • 康安倍泰抑菌粉:以标准为尺,以科研为基,守护女性健康 - 品牌排行榜
  • 基于Vue 3与FastAPI的ChatGPT Web应用脚手架:从流式对话到生产部署
  • PCL点云可视化神器pcl_viewer:从安装到常用快捷键的保姆级指南(附坐标查看技巧)
  • 别再乱用LDO了!实测对比MP2315、RT9193和ADR4550,教你根据电流和压差选对电源芯片
  • 长河、龙龙、欣荣——温州三家黄金回收实体店怎么选?附地址电话 - 李甜岚
  • 中小企业小程序制作服务商怎么选?3种模式成本_速度_功能全对比 - 维双云小凡
  • 串级 PID 在双轮足机器人中的应用:从理论到嵌入式调参
  • 广州本地商家GEO优化实战:从零搭建AI搜索可见度,如何选择广州本地GEO优化公司 - 品牌评测官
  • 7种粗细样式的思源宋体:彻底改变你的中文排版体验,完全免费商用!
  • 告别Optane后,国产SCM存储级内存Xlenstor2 X2900P实战评测:真能平替吗?
  • 使用 jQuery 实现鼠标滚轮事件:监听向上/向下滑动
  • 2026最新海口工商注册公司排行:合规与服务实力实测盘点 - 奔跑123
  • 初次使用Taotoken模型广场进行模型选型与测试的直观感受
  • 2026采购挤出型材选哪家?PMMA、ASA、TPU、HDPE厂家推荐 - 品牌2025
  • 潍坊悍龙机械设备:杭州液压钻床出售哪家口碑好 - LYL仔仔
  • 2026四川碳纤维加固服务商专业深度测评报告 - 深度智识库
  • 全栈开发技术栈解析:TypeScript、React、Prisma与Docker的现代化实践