滚轮事件是不同浏览器会有一点点区别,一个像Firefox使用DOMMouseScroll ,ff也可以使用addEventListener方法绑定DomMouseScroll事件,其他的浏览器滚轮事件使用mousewheel,下面我来给大家具体介绍。
Firefox使用DOMMouseScroll,其他的浏览器使用mousewheel。滚动事件触发时Firefox使用detail属性捕捉滚轮信息,其他的浏览器使用wheelDelta。不知道为何在该问题上其他厂商和微软的如此一致。Firefox可以使用addEventListener方法绑定DomMouseScroll事件。
elem.addEventListener('DOMMouseScroll', func, false);IE和其他的主流浏览器可以使用传统的事件绑定模型。但不要使用IE专有的attachEvent方法,其他主流浏览器并不识别微软的这个方法。
<script type="text/javascript"> // <![CDATA[ var mouseWheel = document.getElementById('mouseWheel'); if (mouseWheel.addEventListener) { mouseWheel.addEventListener('DOMMouseScroll', function(event) { event.target.innerHTML = event.detail; event.stopPropagation(); event.preventDefault(); }, false); } mouseWheel.onmousewheel = function(event) { event = event || window.event; mouseWheel.innerHTML = event.wheelDelta; event.returnValue = false; } // ]]> </script>
测试之后得到如下的结论。
•Firefox 鼠标滚轮向上滚动是-3,向下滚动是3
•IE 鼠标滚轮向上滚动是120,向下滚动是-120
•Safari 鼠标滚轮向上滚动是360,向下滚动是-360
•Opera 鼠标滚轮向上滚动是120,向下滚动是-120
•Chrome 鼠标滚轮向上滚动是120,向下滚动是-120
有人在Safari下做了一些测试:”只是滚动一圈的话,值为+-0.1,如果滚动地稍微快点的话(多滚动几圈),这个值也会变大。 这是因为Mac OS下有鼠标滚轮加速功能。滚动一次,浏览器滚动1像素,滚动3次,浏览器却滚动30像素”。同时他也对Camino(基于Gecko的内核引擎)进行研究:“与Safari相似(+- 0.3 to +-Infinity),虽然使用了与firefox相同的内核引擎,但结果这个delta值却只在+-2.666666里浮动,无论滚动速度如何
例1 获取鼠标滚轮值,判断滚动方向
JavaScript获取鼠标滚轮值,这里的值只有“1”和“-1”两种情况,请选按着中轮滚动,激活后可以不按,直接滚动。程序根据取值可以判断出滚轮的滚动方向,是向上滚还是向下滚,在编写JS游戏的时候我们要用到本功能。
<html> <head> <title>JavaScript判断鼠标滚轮滚动方向- www.fengfly.com </title> <script type="text/javascript"> function handle(delta) { var s = delta + ": "; if (delta <0) s += "您在向下滚……"; else s += "您在向上滚……"; document.getElementById('delta').innerHTML = s; }//from www.fengfly.com function wheel(event){ var delta = 0; if (!event) event = window.event; if (event.wheelDelta) { delta = event.wheelDelta/120; if (window.opera) delta = -delta; } else if (event.detail) { delta = -event.detail/3; } if (delta) handle(delta); } if (window.addEventListener) window.addEventListener('DOMMouseScroll', wheel, false); window.onmousewheel = document.onmousewheel = wheel; </script> </head> <body> <div id="delta">滚动中轮试试~请选按着中轮滚动,激活后可以不按,直接滚动。 </div> <p>shared by http://www.111cn.net</p> </body> </html>
其实我对于各个浏览器的兼容性知道的是少之又少,所了解的也不过是event||window.event , e.target||e.srcElement,element,nextSibling||nextElementSibing等等之类的日常需要用到的一些属性的兼容性写法,关于这些,如果有朋友不知道,我改日抽空会把自己封装出的一些小方法贴出来,并讲解一下,如果是大神就一笑而过就好了。
进入正题,今日在使用自己的洪荒之力搭建自己的博客(TaoHuaXia.github.io,正在搭建中,截至目前只完成首页)的时候,偶然发现window.onmousewheel绑定事件的方法并不能在火狐上正常绑定(火狐真是个磨人的小妖精),于是查阅之,主要有以下两点区别:
1.火狐的鼠标滚轮事件名为DOMMouseScroll
2.火狐的鼠标滚轮事件需要使用element.addEventListenr()
其他的主流浏览器都可以使用onmousewheel正常绑定,所以我们可以拿出一个兼容性的写法来专门对付火狐:
if(document.addEventListener){
document.addEventListener('DOMMouseScroll',fn,false);
}//火狐
window.onmousewheel=document.onmousewheel=fn;//IE/Opera/Chrome
同时关于各个浏览器滑动滚轮时的距离问题,这篇博客有很细致的讲解,大家可以移步至此
---------------------
作者:ServerWang
来源:CSDN
原文:https://blog.csdn.net/SuperCoooooder/article/details/52403869
版权声明:本文为博主原创文章,转载请附上博文链接!