鼠标滚轮事件介绍

简介

  IE6实现了鼠标滚轮事件mousewheel,这个事件包含了一个鼠标事件所没有的属性,wheelDelta,这

个属性值始终是120的倍数,而且向上滑动一单位,wheelDelta值为120,向下为-120.随后Chrome,Opera,

Safari等也都实现了该事件。Opera10之前的版本对wheelDelta值的符号处理错误,需要修改。但是Firefox没

有该事件,而是用DOMMouseScroll。这个事件只有Firefox支持,所以可以单独针对Firefox做兼容。

  另外,HTML5为了兼容这两个事件,另外规定了一个标准版本wheel事件,比较新的浏览器基本实现了该事件。

chrome31+,Firefox 17+,IE9+,Safari 7.0.5以及新版使用webkit内核的Opera,使用Carakan内核的Opera

并不支持该事件。wheel事件有deltaX、deltaY和deltaZ属性,默认为100.

  综上,目前wheel事件的兼容性其实并不理想,mousewheel的兼容性最佳,适用于除Firefox外的所有浏览器,对于

Firefox则单独做兼容处理。

  

 1 addEvent = function(type,callback,useCapture){
 2     if(window.addEventListener){
 3         this.addEventListener(type,callback,!!useCapture);
 4     }else if(window.attachEvent){
 5         this.attachEvent(‘on‘+type,callback);
 6     }
 7     return callback;
 8 }
 9 wheel = function(el,callback){
10     var type = ‘mousewheel‘;
11     try{
12         document.createEvent(‘MouseScrollEvents‘);
13         type = ‘DOMMouseScroll‘;
14     }catch(e){}
15     el.addEvent = addEvent;
16     el.addEvent(type,function(e){
17         e = e || window.event;
18         var wheelDelta,delta;
19         if(‘wheelDelta‘ in e){
20             wheelDelta = e.wheelDelta;  // 正数向上滚动
21             if(window.opera && window.opera.version() < 10){
22                 e.delta = parseInt(-wheelDelta) / 120;  // safari 下的wheeldelta为浮点数
23             }
24             e.delta = parseInt(wheelDelta) / 120;
25         }else if(‘detail‘ in e){
26             e.wheelDelta = -e.detail * 40; //修复firefox下没有wheelDelta的bug,detail为+-3
27             e.delta = e.wheelDelta / 120;
28         }
29         callback.call(el,e);
30         //阻止向上冒泡
31         e.stopPropagation && e.stopPropagation();
32         if("stopBubble" in e) e.stopBubble = true;
33         return false;
34     },false);
35 };
时间: 2024-10-29 10:46:24

鼠标滚轮事件介绍的相关文章

鼠标滚轮事件

由于浏览器的不同,对鼠标滚轮事件也有所不同,大致可分为DOMMouseScroll 和onmousewheel两类 1.第一类是Firefox支持的DOMMouseScroll事件,此事件必须以addEventListener来绑定,当鼠标滚轮上下滚动时 ev.detail向上为-3,向下为3. 2.第二类是IE/chrome支持的onmousewheel事件,当鼠标滚轮上下滚动时 ev.wheelDelta向上为120,向下为-120.

鼠标滚轮事件的监听

鼠标滚轮事件的监听原理:判断鼠标滚轮的滚动获取一个值,根据这个值判断滚动的方向.分析:首先,判断滚轮方向.Firefox:detail,取值为-/+3(负值向上,正值向下):其他:wheelDelta,取值为+/-120(正值向上,负值向下).兼容所有浏览器的的封装: ? 1 2 3 4 5 6 7 8 9 10 function scrollEvent(ev){     ev = ev || window.event;     var data = '';     if(ev.wheelDel

JS鼠标滚轮事件解析

一.不同浏览器的鼠标滚轮事件 首先,不同的浏览器有不同的滚轮事件.主要是有两种,onmousewheel(IE/Opera/Chrome支持,firefox不支持)和DOMMouseScroll(只有firefox支持) 另外在操作的过程中需要添加事件监听,兼容性写法 代码如下: /*注册事件*/ if(document.addEventListener){ document.addEventListener('DOMMouseScroll',scrollFunc,false); // W3C

js中鼠标滚轮事件详解

(以下内容部分内容参考了http://adomas.org/javascript-mouse-wheel/ ) 之前js 仿Photoshop鼠标滚轮控制输入框取值中已使用js对鼠标滚轮事件进行控制,滚轮事件其中考虑浏览器兼容性问题 附加事件 其中经我测试,IE/Opera属于同一类型,使用attachEvent即可添加滚轮事件. /*IE注册事件*/ if(document.attachEvent){ document.attachEvent('onmousewheel',scrollFunc

鼠标滚轮事件MouseWheel

其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+,Chrome)中,都提供了 "mousewheel" 事件.但杯具的是 Firefox 却不支持此事件,不过庆幸 Firefox  中提供了另外一个等同的事件:"DOMMouseScroll" . OK,我们现在已经知道了不同浏览器之间实现的差别,兼容代码如下: var addEvent = (function () { if (window.addEventListener

JS鼠标滚轮事件详解

鼠标滚轮事件 //兼容性写法,该函数也是网上别人写的,不过找不到出处了,蛮好的,所有我也没有必要修改了 //判断鼠标滚轮滚动方向 if (window.addEventListener)//FF,火狐浏览器会识别该方法 window.addEventListener('DOMMouseScroll', wheel, false); window.onmousewheel = document.onmousewheel = wheel;//W3C //统一处理滚轮滚动事件 function whe

js整频滚动展示效果(函数节流鼠标滚轮事件)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head> <meta http-equiv="Content-T

VC 鼠标滚轮事件控制绘图的问题

问题描述: 在MFC中绘制数据曲线,通过鼠标滚轮来进行放大缩小操作.在使用滚轮事件时,发现如果数据量较大,会出现卡顿. 解决方案: 鼠标滚轮事件会进行重复绘图,考虑在鼠标滚轮结束之后再重绘: 在鼠标滚轮事件中更新:重绘标识,新坐标轴值,此时时间: 利用OnTimer函数,在重绘标识为真时,判断当前时间与滚轮事件时间的差,超过预定值(比如500ms)就重绘,并置重绘标识为假. 方案待验证.

Winform 中panel的mousewheel鼠标滚轮事件触发

如果将窗体或容器控件(如Panel控件)的AutoScroll属性设置为True时,那么当窗体或Panel容不下其中的子控件时就会出现 滚动条,通过移动滚动条可以上下显示出窗体或Panel中的全部内容.但是默认情况下滚动条的移动只能通过鼠标直接拖动滚动条来实现,而不能通过鼠标的滚 轮来实现上下移动,因此需要手动添加代码来实现这个功能. 滚动鼠标的滚轮,触发的是窗体或控件上的 MouseWheel 事件.但是在VS.net2005中,窗体和控件的事件列表中却不包含 MouseWheel 事件,因此