解析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 function调用时的参数检测常用办法
Feb 26 Javascript
关于 文本框默认值 的操作js代码
Jan 12 Javascript
js的window.showModalDialog及window.open用法实例分析
Jan 29 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
Dec 08 Javascript
js操作数据库实现注册和登陆的简单实例
May 26 Javascript
前端设计师们最常用的JS代码汇总
Sep 25 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
Nov 18 Javascript
Websocket协议详解及简单实例代码
Dec 12 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
Sep 18 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
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中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
Js实现网页键盘控制翻页的方法
2014/10/30 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
AngularJS上传文件的示例代码
2018/11/10 Javascript
Node.js的进程管理的深入理解
2019/01/09 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
python3.5 email实现发送邮件功能
2018/05/22 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python 移除字符串尾部的数字方法
2018/07/17 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
pandas 空数据处理方法详解
2019/11/02 Python
tensorflow 查看梯度方式
2020/02/04 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
大学生素质拓展活动方案
2014/02/11 职场文书
欢迎领导标语
2014/06/27 职场文书
环境科学专业求职信
2014/08/04 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
canvas实现贪食蛇的实践
2022/02/15 Javascript
Nginx跨域问题解析与解决
2022/08/05 Servers