解析javascript中鼠标滚轮事件


Posted in Javascript onMay 26, 2015

所有的现代浏览器都支持鼠标滚轮,并且在用户滚动滚轮时触发时间。浏览器通常使用鼠标滚轮滚动或缩放文档,但可以通过取消mousewheel事件来阻止这些默认操作。有一些互用性问题影响滚轮事件,但是编写跨平台的代码依旧可以行。除了Firefox之外的所有浏览器都支持“mousewheel”事件,但Firefox使用“DOMMouseScroll”,而3级DOM事件规范草案建议使用事件名“wheel”替代“mousewheel”。

document.body.onmousewheel = function(event){
  event = event || window.event;
  console.dir(event);
}

Firefox不支持mousewheel

document.body.addEventListener("DOMMouseScroll",function(event){
  console.dir(event);
})

以下滚轮向下滚动是chrome和IE9下面控制台输出

解析javascript中鼠标滚轮事件

解析javascript中鼠标滚轮事件

以下是滚轮向下滚动Firefox下面控制台输出

解析javascript中鼠标滚轮事件解析javascript中鼠标滚轮事件

从上面输出得出,可以使用非标准的DOMMouseScroll事件取代mousewheel,使用事件对象的detail属性取代wheelDetal。但是,detail属性值的缩放比率和正负符号不同于wheelDetal,detail值乘以-40和wheelDetal值相等。

在除了FireFox之外的浏览器下,滚动的上下滚动与否是下面这个wheelDelta有关。

解析javascript中鼠标滚轮事件

根据测试,在我的win7系统下,无论IE7, IE10, Opera12,或者是safari5.1,每次往下滚动event.wheelDelta值都是-120.

对于FireFox浏览器(Opera浏览器也有),判断鼠标滚动方向的属性为event.detail, 向下滚动值为3.
解析javascript中鼠标滚轮事件

需要注意的是,FireFox浏览器的方向判断的数值的正负与其他浏览器是相反的。FireFox浏览器向下滚动是正值,而其他浏览器是负值。

var isFirefox = (navigator.userAgent.indexOf("Firefox") !== -1);
if(isFirefox){
  element.addEventListener("DOMMouseScroll",wheelHandler,false);
}
element.onmousewheel = wheelHandler;
//element.onwheel = wheelHandler; //DOM3级wheel事件,经过测试IE9还是不支持,但是谷歌和火狐都支持,在谷歌内有wheelDelta在火狐里面有detail
function wheelHandler(event){ event = event || window.event; var delta = event.wheelDelta || detail*-30; }

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
Dec 04 Javascript
jquery 表格的增行删行实现思路
Mar 21 Javascript
jquery插件validate验证的小例子
May 08 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
总结JavaScript设计模式编程中的享元模式使用
May 21 Javascript
jQuery简单实现仿京东分类导航层效果
Jun 07 Javascript
浅谈jquery设置和获得checkbox选中的问题
Aug 19 Javascript
jQuery上传插件webupload使用方法
Aug 01 jQuery
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
Feb 23 Javascript
vue.js this.$router.push获取不到params参数问题
Mar 03 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
May 06 Javascript
JS中字符串trim()使用示例
May 26 #Javascript
JSON字符串和对象之间的转换详解
May 26 #Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 #Javascript
Javascript实现飞动广告效果的方法
May 25 #Javascript
javascript自定义右键弹出菜单实现方法
May 25 #Javascript
JS+DIV实现鼠标划过切换层效果的方法
May 25 #Javascript
JavaScript实现仿网易通行证表单验证
May 25 #Javascript
You might like
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
wxPython实现分隔窗口
2019/11/19 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
药学专业学生的自我评价分享
2014/02/06 职场文书
绩效管理实施方案
2014/03/19 职场文书
高中课程设置方案
2014/05/28 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
react 项目中引入图片的几种方式
2021/06/02 Javascript
Redis 哨兵机制及配置实现
2022/03/25 Redis