解析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 相关文章推荐
菜单效果
Oct 14 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
javascript容错处理代码(屏蔽js错误)
Jan 20 Javascript
ES6学习笔记之Set和Map数据结构详解
Apr 07 Javascript
AngularJS读取JSON及XML文件的方法示例
May 25 Javascript
jQuery常用选择器详解
Jul 17 jQuery
webstorm+vue初始化项目的方法
Oct 18 Javascript
对layer弹出框中icon数字参数的说明介绍
Sep 04 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
Aug 27 Javascript
关于javascript中的promise的用法和注意事项(推荐)
Jan 15 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
解析php函数method_exists()与is_callable()的区别
2013/06/21 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
python映射列表实例分析
2015/01/26 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
python return逻辑判断表达式实现解析
2019/12/02 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
美术国培研修感言
2014/02/12 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
西式婚礼主持词
2014/03/13 职场文书
白血病募捐倡议书
2014/05/14 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
python开发的自动化运维工具ansible详解
2021/08/07 Python