鼠标滚动:mousewheel事件在Firefox采用DOMMouseScroll事件的统一处理

这是一个小事件,但当下的WEB应用交互非常丰富,判断鼠标的滚动来执行相应的操作是比较常见的。我用Chrome/IE/Firefox/Opera 4种浏览器做测试,发现只有firefox的处理方法有很大的不同,下面细说一下这个情况:

第1、事件的名称不同

其它浏览器均采用mousewheel做为事件的名称,而Firefox采用DOMMouseScroll做为事件的名称,为了兼容,那我们就得绑定两次事件,如下:

1 document.addEventListener(‘mousewheel‘, handlerMouseWheel);
2 document.addEventListener(‘DOMMouseScroll‘, handlerMouseWheel);

第2、判断滚轮的方向和值均不同

其它浏览器均是向上滚动为正值(+120)、向下滚动为负值(-120)。而Firefox则是向上滚动为负值(-5),向下滚动为正值(+5)。

第3、包装event对象不同

Firefox对滚轮滚动的值保存在event对象中的detail属性里,而其它浏览器保存在event对象中的wheelDelta属性。

为了方便统一处理,我们还得编写一个函数,让firefox与其它浏览器的取值与方向相同,代码如下:

1 var getWheelDelta = function(event) {
2     return event.wheelDelta || (-event.detail * 24);
3 }

上面采用-event.detail来保持方向一致,放大24倍来保持值一致。(保持一次并非必需的,但有些情况下保持一致有利于处理)

时间: 2024-11-08 11:33:00

鼠标滚动:mousewheel事件在Firefox采用DOMMouseScroll事件的统一处理的相关文章

鼠标滚轮(mousewheel)和DOMMouseScroll事件

IE6.0首先实现了mousewheel事件.此后,Opera.Chrome和Safari也都实现了这个事件.当用户通过鼠标滚轮与页面交互.在垂直方向上滚动页面时(无论向下还是向上),就会触发mousewheel事件.这个事件可以在任何元素上面触发,最终会冒泡到document(IE)或window(Opera.Chrome.及Safari)对象.与mousewheel事件对应的event对象包含鼠标事件的所有标准信息之外,还包含一个特殊的wheelDelta属性.当用于向前滚动鼠标滚轮是,wh

鼠标滚动事件 - onmousewheel

1.Jquery-MouseWheel jquery默认是不支持支持鼠标滚轮事件(mousewheel) jquery MouseWheel下载:https://github.com/jquery/jquery-mousewheel/blob/master/jquery.mousewheel.js 然后就可以使用mousewheel和unmousewheel事件函数了 1 $('div.mousewheel_example').mousewheel(fn); 2 $('div.mousewhee

对于鼠标滚动事件的扩充

本篇如题,是对上一个鼠标滚动事件的扩充 具体扩充内容: 1.可以添加点击元素(control_up/control_down)来控制页面的滚动 2.可以选择触发方式(点击.滚轮滚动.点击和滚轮滚动) //使用鼠标滚轮每次滚动浏览器大小的距离//obj格式{touch: click||scroll||click&scroll, control_up: id, control_down: id}//touch:什么触发方式,三个选项click/scroll/click&scroll:contr

鼠标滚动事件

鼠标滚动事件 关于滚动事件这方面,其实是比较乱的. 滚轮事件的兼容性差异有些不拘一格,不是以往的IE8-派和其他派,而是FireFox派和其他派. 包括IE6在内的浏览器是使用onmousewheel,而FireFox浏览器一个人使用DOMMouseScroll. 经自己测试,即使现在FireFox 19下,也是不识onmousewheel. 在其他派中检测滚动数值的属性是wheelDelta ,向上滚为120,向下为-120. 在火狐中检测滚动数值的属性是detail,向上滚为-3,向下为3.

js禁用鼠标滚动wheel/DomMouseScroll

function scrollFunc(evt) {  evt = evt || window.event;    if(evt.preventDefault) {    // Firefox      evt.preventDefault();      evt.stopPropagation();    } else {      // IE      evt.cancelBubble=true;      evt.returnValue = false;  }  return false;

解决ScrollViewer嵌套的DataGrid、ListBox等控件的鼠标滚动事件无效

C# 中,两个ScrollViewer嵌套在一起或者ScrollViewer里面嵌套一个DataGrid.ListBox.Listview(控件本身有scrollviewer)的时候,我们本想要的效果是鼠标滚动整个ScrollViewer的内容,但你会发现实际结果和你想像的不一样,内部有scrollviewer的内容不会随鼠标的滚动而滚动,怎么办呢? 解决办法如下: 先截取外面的ScrollViewer的滚动事件,然后再重新让外面的ScrollViewer触发滚动事件就可以了 假设有2个控件,一

设置鼠标滚动事件

当QScrollview内容过多出现滚动条时,此时如果把鼠标移到里面的一个button上并滚动滑轮时,可以看到QScrollview并不会出现滚动的情况,因此我们就需要为button添加一个滚动事件 注:SubTitlePushButton继承于QPushButton,自定义的一个button类,然后在里面添加鼠标滚动事件 bool SubTitlePushButton::event(QEvent *event) { /* if (event->type() == QEvent::Paint)

理解鼠标滚动事件

javascript<script> window.onload = function(){ var count = 0; document.onmousewheel = function(e){ /*鼠标滚动的量 下滚是负 上滚是正*/ if(e.wheelDelta < 0){ count ++; }else{ count --; } console.log(count); } }</script>``` #### 第二步 了解 fullpage jquery插件 >

基于jquery的鼠标滚动放大缩小图片

一直以来都想写一个图片放大和缩小的小玩意,本来以为会很复杂,这几天自己思考了一下,原来是so easy啊.目前实现的放大缩小,主要时依据鼠标的滚轮触发事件来实现的,废话少说直接上源码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns