解析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修改网页背景颜色通过css方法实现
Jun 06 Javascript
jQuery中index()的用法分析
Sep 05 Javascript
jQuery实现拖拽效果插件的方法
Mar 23 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
Oct 15 Javascript
常见的浏览器Hack技巧整理
Jun 29 Javascript
JS实现简易换图时钟功能分析
Jan 04 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
Jan 24 Javascript
js笔试题-接收get请求参数
Jun 15 Javascript
node 解析图片二维码的内容代码实例
Sep 11 Javascript
JavaScript判断数组类型的方法
Oct 23 Javascript
vue把输入框的内容添加到页面的实例讲解
Nov 11 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 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程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
vuex的使用和简易实现
2021/01/07 Vue.js
Python远程桌面协议RDPY安装使用介绍
2015/04/15 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
HTML5 canvas基本绘图之图形组合
2016/06/27 HTML / CSS
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
公益广告标语
2014/06/19 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
利用python做数据拟合详情
2021/11/17 Python