解析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 经典动画菜单效果代码
Jan 26 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
js表单提交和submit提交的区别实例分析
Dec 10 Javascript
javascript闭包概念简单解析(推荐)
Jun 03 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 Javascript
简单实现jQuery弹幕效果
May 06 jQuery
angular directive的简单使用总结
May 24 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
原生JS写Ajax的请求函数功能
Dec 22 Javascript
小程序云开发如何实现图片上传及发表文字
May 17 Javascript
纯JS开发baguetteBox.js响应式画廊插件
Jun 28 Javascript
JavaScript阻止事件冒泡的方法
Dec 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中用数组的方法设置cookies
2011/04/21 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
如何使用php等比例缩放图片
2016/10/12 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
python自定义类并使用的方法
2015/05/07 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python+Wordpress制作小说站
2017/04/14 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
经济学人订阅:The Economist
2018/07/19 全球购物
省三好学生申请材料
2014/01/22 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
体育教师个人总结
2015/02/09 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
工作自我评价范文
2019/03/21 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python
Python使用Web框架Flask开发项目
2022/06/01 Python