解析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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
Aug 13 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
JS检测图片大小的实例
Aug 21 Javascript
js浏览器本地存储store.js介绍及应用
May 13 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
Dec 28 Javascript
js实现截图保存图片功能的代码示例
Feb 16 Javascript
原生JS+Canvas实现五子棋游戏
May 28 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
Jul 05 Javascript
微信小程序页面调用自定义组件内的事件详解
Sep 12 Javascript
关于vue中如何监听数组变化
Apr 28 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
apache+mysql+php+ssl服务器之完全安装攻略
2006/09/05 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
Python 文件操作实现代码
2009/10/07 Python
python实现给字典添加条目的方法
2014/09/25 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
浅谈Django的缓存机制
2018/08/23 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
python range实例用法分享
2020/02/06 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
物理系毕业生自荐信
2013/11/01 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
产品质量承诺书
2014/03/27 职场文书
2015年信访工作总结
2015/04/07 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
python_tkinter弹出对话框创建
2022/03/20 Python
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL