解析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 相关文章推荐
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
Jquery替换已存在于element上的event的方法
Mar 09 Javascript
JS中showModalDialog 的使用解析
Apr 17 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
Jan 13 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
Dec 24 Javascript
Angular.js回顾ng-app和ng-model使用技巧
Apr 26 Javascript
JS使用JSON作为参数实例分析
Jun 23 Javascript
Angular的自定义指令以及实例
Dec 26 Javascript
微信小程序网络请求的封装与填坑之路
Apr 01 Javascript
JavaScript中BOM对象原理与用法分析
Jul 09 Javascript
Vue组件间数据传递的方式(3种)
Jul 13 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
javascript 函数调用的对象和方法
2010/07/01 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
Python2.x与Python3.x的区别
2016/01/14 Python
Django URL传递参数的方法总结
2016/08/28 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
python DataFrame 取差集实例
2019/01/30 Python
Python tkinter模版代码实例
2020/02/05 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
python如何建立全零数组
2020/07/19 Python
物流管理毕业生自荐信
2013/10/24 职场文书
外贸英语专业求职信范文
2013/12/25 职场文书
任命书怎么写
2014/06/04 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
入党积极分子群众意见
2015/06/01 职场文书
酒店宣传语大全
2015/07/13 职场文书
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python