解析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 相关文章推荐
自定义右键属性覆盖浏览器默认右键行为实现代码
Feb 02 Javascript
JavaScript中的原型和继承详解(图文)
Jul 18 Javascript
JavaScript中的console.trace()函数介绍
Dec 29 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
Mar 21 jQuery
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
May 27 Javascript
详解Vue.js搭建路由报错 router.map is not a function
Jun 27 Javascript
Vue下路由History模式打包后页面空白的解决方法
Jun 29 Javascript
vue+axios+element ui 实现全局loading加载示例
Sep 11 Javascript
vue基础之data存储数据及v-for循环用法示例
Mar 08 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 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获得用户ip地址的比较不错的方法
2014/02/08 PHP
详解PHP的Yii框架的运行机制及其路由功能
2016/03/17 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
跨浏览器的事件对象介绍
2012/06/27 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
javascript 构造函数方式定义对象
2015/01/02 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
原生js实现图片层叠轮播切换效果
2016/02/02 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
vue图片上传组件使用详解
2019/12/23 Javascript
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
Python实现单词拼写检查
2015/04/25 Python
python @property的用法及含义全面解析
2018/02/01 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
技术员个人工作总结
2015/03/03 职场文书
检讨书格式
2019/04/25 职场文书
教你用python实现12306余票查询
2021/06/30 Python