其实在大多数浏览器(IE6, IE7, IE8, Opera 10+, Safari 5+,Chrome)中,都提供了 “mousewheel” 事件。但杯具的是 Firefox 却不支持此事件,不过庆幸 Firefox  中提供了另外一个等同的事件:”DOMMouseScroll” 。

OK,我们现在已经知道了不同浏览器之间实现的差别,兼容代码如下:

var addEvent = (function () {

if (window.addEventListener) {

return function (el, sType, fn, capture) {

el.addEventListener(sType, fn, (capture));

};

} else if (window.attachEvent) {

return function (el, sType, fn, capture) {

el.attachEvent("on" + sType, fn);

};

} else {

return function () {};

}

})(),

// isFirefox 是伪代码,大家可以自行实现

mousewheel = isFirefox ? "DOMMouseScroll" : "mousewheel";

// object 也是伪代码,你需要注册 Mousewheel 事件的元素

addEvent(object, mousewheel, function (event) {

event = window.event || event;

// todo something

}, false);

我们再回到要实现的交互效果上,现在还有其他一些问题需要来解决:

1. 页面字体到底是放大还是缩小呢? ==> 鼠标滚轮是向上滚动还是向下滚动呢?

2. 页面字体缩放的倍数到底是多少呢? ==> 鼠标滚轮滚动的幅度大小是多少呢?

还好,我们可以通过 event 的某些属性值得到这些信息:

1. “mousewheel” 事件中的 “event.wheelDelta” 属性值:返回的值,如果是正值说明滚轮是向上滚动,如果是负值说明滚轮是向下滚动;返回的值,均为 120 的倍数,即:幅度大小 = 返回的值 / 120。

2. “DOMMouseScroll” 事件中的 “event.detail” 属性值:返回的值,如果是负值说明滚轮是向上滚动(与 “event.wheelDelta” 正好相反),如果是正值说明滚轮是向下滚动;返回的值,均为 3 的倍数,即:幅度大小 = 返回的值 / 3。

3. “mousewheel” 事件在 Opera 10+ 中却是个特例,既有 “event.wheelDelta” 属性,也有 “event.detail” 属性。

注:上面第三点,在《The onmousewheel event of JavaScript》一文中有这样一段批注:

In Opera, “detail” returns the same value as it does in FF, so for the big O you should rely on “detail”

instead of “wheelDelta”, which depending on the Opera version may return a different value than in IE's.

但经测试, Opera 9+ 和 Opera 10+ 中的 event.wheelDelta 属性与其他浏览器中的表现完全一致,未发现异常与错误,从接口角度来说,代码中应优先使用 “event.wheelDelta” 属性。此时代码如下:

var addEvent = (function () {

if (window.addEventListener) {

return function (el, sType, fn, capture) {

el.addEventListener(sType, fn, (capture));

};

} else if (window.attachEvent) {

return function (el, sType, fn, capture) {

el.attachEvent("on" + sType, fn);

};

} else {

return function () {};

}

})(),

stopEvent : function (event) {

if (event.stopPropagation) {

event.stopPropagation();

} else {

event.cancelBubble = true;

}

if (event.preventDefault) {

event.preventDefault();

} else {

event.returnValue = false;

}

},

zoomIn = function () {},

zoomOut = function () {},

// isFirefox 是伪代码,大家可以自行实现

mousewheel = isFirefox ? "DOMMouseScroll" : "mousewheel";

// object 是伪代码,你需要注册 Mousewheel 事件的元素

addEvent(object, mousewheel, function (event) {

var delta = 0;

event = window.event || event;

stopEvent(event);

delta = event.wheelDelta ? (event.wheelDelta / 120) : ( - event.detail / 3);

// zoomIn, zoomOut 是伪代码,需要实现的缩放事件

delta > 0 ? zoomIn(delta) : zoomOut(Math.abs(delta));

}, false);

jquery插件默认是不支持鼠标中轮滚轮事件的,现在我们可以用于添加跨浏览器的鼠标滚轮支持可以使用jquery的Mousewheel插件。

使用mousewheel事件有以下两种方式:

使用mousewheel和unmousewheel事件函数;

使用经典的bind和unbind函数。

$('div.mousewheel_example').mousewheel(fn);

$('div.mousewheel_example').bind('mousewheel', fn);

mousewheel事件的处理函数有一点小小的变化,它除了第一个参数event外,还接收到第二个参数delta。通过参数delta可以获取鼠标滚轮的方向和速度。如果delta的值是负的,那么滚轮就是向下滚动,正的就是向上。

以下是示例的源代码:

jQuery(function($) {

$('div.mousewheel_example')

.bind('mousewheel', function(event, delta) {

var dir = delta > 0 ? 'Up' : 'Down',

vel = Math.abs(delta);

$(this).text(dir + ' at a velocity of ' + vel);

return false;

});

});

使用

要使用这个功能,只需对目标元素的’mousewheel’事件绑定事件处理函数即可。

Mousewheel插件还提供了两个事件函数:mousewheel和unmousewheel,可以对目标元素调用这两个函数,并在参数中指定回调函数。

事件的回调函数第一个参数为event,第二个参数为delta,代表鼠标滚轮的变化值。

以下是上面两种使用方式的示例:

// 绑定方式

$('#my_elem').bind('mousewheel', function(event, delta) {

console.log(delta);

});

// 事件函数方式

$('#my_elem').mousewheel(function(event, delta) {

console.log(delta);

});

jquery的鼠标滚轮插件 Mousewheel下载

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

如果将窗体或容器控件(如Panel控件)的AutoScroll属性设置为True时,那么当窗体或Panel容不下其中的子控件时就会出现 滚动条,通过移动滚动条可以上下显示出窗体或Panel中的全部内容 ...

JS滚轮事件(mousewheel/DOMMouseScroll)了解

已经没有了小学生时代过目不忘的记忆力了,很多自己折腾的东西.接触的东西,短短1年之后就全然不记得了.比方说,完全记不得获取元素与页面距离的方法(getBoundingClientRect),或者是不记 ...

JS鼠标滚轮事件详解

鼠标滚轮事件 //兼容性写法,该函数也是网上别人写的,不过找不到出处了,蛮好的,所有我也没有必要修改了 //判断鼠标滚轮滚动方向 if (window.addEventListener)//FF,火狐 ...

js鼠标滚轮事件兼容

JavaScript鼠标滚轮事件 IE6.0首先实现了鼠标的滚轮事件,其良好的交互效果得到认可,随后Opera.chrome.safari等主流浏览器都实现了该效果,不过存在着很大的兼容问题. 大多数 ...

jQuery禁用、开启鼠标滚轮事件

1.禁用鼠标滚轮事件 $(document).bind('mousewheel', function(event, delta) {return false;}); 2.开启鼠标滚轮事件,直接解绑事件 ...

学习 JS滚轮事件(mousewheel/DOMMouseScroll)

学习 JS滚轮事件(mousewheel/DOMMouseScroll) 1-1 滚轮事件兼容性的差异   IE,chrome,safari 浏览器都使用 onmousewheel, 只有firefo ...

js中的鼠标滚轮事件

## 事件对象 event 1 event事件对象,表示用来获取事件的详细信息,比如得到鼠标的横坐标:事件对象.clientX(clientX是可视区坐标) window.onclick = func ...

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

问题描述: 在MFC中绘制数据曲线,通过鼠标滚轮来进行放大缩小操作.在使用滚轮事件时,发现如果数据量较大,会出现卡顿. 解决方案: 鼠标滚轮事件会进行重复绘图,考虑在鼠标滚轮结束之后再重绘: 在鼠标滚 ...

js鼠标滚轮事件

不多说,直接上代码. //非ie document.body.onmousewheel = function(event) { event = event || window.event; conso ...

随机推荐

Windows下MySQL无法启动

问题描述: 从网上下了5.7 的MySQL,在bin目录下执行 start mysqld ,弹出个cmd窗口一闪就没了,也看不清是什么报错.mysqld --install安装了服务,也启动不了.   ...

Linux系统开机默认开启无线网卡

Linux系统每次重新启动时,不会重新打开无线网卡,需要每次手动去更改. 这里通过两种方式开启无线网卡. 第一种方式就是手动连接到Linux系统,(前提是按照了Linux桌面) 1.找到文件夹为 et ...

iOS UIScrollView的使用

一.为什么要用UIScrollView? 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容普通的UIVie ...

EL表达式详解及应用实例

1. EL是JSP内置的表达式语言! * jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本! * EL替代的是,也就是说,EL只 ...

BlazeMeter发布chrome扩展插件,支持JMeter脚本创建

BlazeMeter发布chrome扩展插件,支持JMeter脚本创建http://www.automationqa.com/forum.php?mod=viewthread&tid=3898 ...

Helpers\Data

Helpers\Data Data helper contains a bunch of useful methods for looking at and altering your data. D ...

Obj-C中内存的管理一瞥

注意,ARC仅仅(自动)释放你手工管理的Objective-C类实例的内存, 但是不会释放由C函数或者Core Foundation(Cocoa的底层,C语言的变体)申请的内存.

Asp.net 项目部署的两个问题

1:关于MVC中BundleCollection压缩js css文件 发布后获取失败的问题 原因是: 默认本地vs里面调试的时候,因为web.config文件里面有一个debug属性,当有此属性时,默 ...

Hard Rock

Ilya is a frontman of the most famous rock band on Earth. Band decided to make the most awesome musi ...

POJ 2685

#include #include #define MAXN 26 using namespace std; int _map[MAXN ...

java响应鼠标滚轮事件_鼠标滚轮事件MouseWheel相关推荐

  1. python鼠标移动轨迹_鼠标的另一种选择,肯辛通轨迹球能否改变固有的使用习惯?...

    [引言] 鼠标,作为电脑甚至是现在Pad的外接输入设备,其地位从1964年雏形诞生的那一刻起便从未被撼动,哪怕是thinkpad的小红点以及外接触摸板的出现.鼠标最早只是一个装有两个滚轮(是圆盘型滚轮 ...

  2. mysql数据库什么是事件_[数据库]Mysql 事件(定时任务)

    [数据库]Mysql 事件(定时任务) 0 2016-04-25 18:00:28 mysql 创建任务(事件) 1.检查数据库事件是否开启,如果 event_scheduler 等于 NO表示开启 ...

  3. html文本框鼠标离开事件,html鼠标事件_文本框事件

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 今天57号网络技术分享给大家介绍html鼠标事件,就是当前文本框获得焦点时,里面的原有文本清零. 首先我们来看一看源代码运行后的效果图片: 你也可以[点击 ...

  4. onbeforeunload 拿不到鼠标事件_鼠标、键盘卖不动了?这个“大学生最爱”的品牌业绩下滑后出大招了...

    业绩连年下滑,让生产鼠标键盘的雷柏科技(002577.SZ)决定转型当包租公了.11月26日晚间,雷柏科技发布了多份公告,核心内容在于:公司拟从自产转型为走"代工"路线.在上述路线 ...

  5. java cms 拖拽布局_鼠标拖拽就能轻松建站 We7 CMS评测

    We7 CMS是由西部动力推出的一套采用C#开发的,基于.net2.0,可以运行于Oracle.SQLite.Sqlserver.MySQL.Access等数据库之上的网站内容管理系统软件(Conte ...

  6. 笔记本电脑没有鼠标怎么右键_鼠标右键失灵怎么办,你知道原因吗?

    在上网时,有时会遇到按右键没有反应的情况.一开始还以为是中了病毒,但是重启之后,又恢复正常了,这到底是怎么回事呢? 如果是在我电脑上操作电脑软件导致的鼠标右键失灵可能以下原因造成的. 一:系统繁忙,不 ...

  7. java响应式网页设计_基于HTML5的响应式网站的设计与实现(论文).docx

    毕业论文 基于HTML5的响应式网站的设计与实现 摘 要 随着网络的发展和普及,各类建站技术的更新与运用,现在搭建一个网站的时间和成本越来越低,使得企业官方网站得到了极大的发展.从早期简单的网页展示, ...

  8. 测试鼠标是否双击_鼠标连接电脑没反应

    可能是由于鼠标的驱动原因,您可以右键点击打开[设备管理器]找到鼠标,然后右键[更新驱动]:也有可能是当前的USB接口供电不足导致的,您可以换一个接口尝试一下 .以下是详细介绍: 1.可能是由于鼠标出现 ...

  9. vba模拟鼠标点击_鼠标键盘模拟大师下载_鼠标键盘模拟大师免费版官方下载6.2...

    鼠标键盘模拟大师是目前国内唯一一款将鼠标自动点击.键盘自动输入.网页自动刷新和自动切换IP地址等功能完美结合与一体的鼠标键盘动作模拟软件,可以实现桌面及游戏的自动点击和按键点击等功能,有需要的小伙伴快 ...

最新文章

  1. Java精选笔记_XML基础
  2. 在千万级的数据库查询中,如何提高效率?
  3. java udp简单聊天程序_Java基于UDP协议实现简单的聊天室程序
  4. 直接使用editbox.clear()清空时,有时会无法清除完全,此时有清空文本框的另一种方法...
  5. 剖析 |数据现代化-富国银行的数据转型之路
  6. 【JAVA】初识Java
  7. 电脑ping不通的原因
  8. 网站漏洞扫描工具--Safe3 Web Vul Scanner功能展示
  9. win10 下安装wampserver 的几个坑
  10. Material-design icon生成插件
  11. 案例解读 | 拯救“中年危机”:星巴克的新零售之道
  12. 试着用人话说说 使命 愿景 价值观,以及人的三观
  13. Trove 3.0.0
  14. 2021年危险化学品经营单位安全管理人员考试及危险化学品经营单位安全管理人员试题及解析
  15. Uc_client与ucenter通信原理
  16. matlab常用的设置,坐标系、线条颜色、线型,字体、属性
  17. 求助,电脑关闭游戏后自动弹出dptf
  18. The Shawshank Redemption-18
  19. 双二阶IIR滤波器——直接I型、直接II型C语言实现
  20. 快车移动端SDK使用说明

热门文章

  1. 贪吃蛇大作战的开发(二)
  2. Windows11 的体验
  3. HTML在前端设置标签文字的颜色动态变化
  4. gitbook README.md
  5. 浅谈压缩感知(二十八):压缩感知重构算法之广义正交匹配追踪(gOMP)
  6. LDR6028 OTG取电传数据方案-直播声卡数据充电转接线方案
  7. 自动驾驶岗位招聘——感知算法、决策规划算法、系统架构师
  8. arm linux imx6u移植goahead web服务器
  9. 物联网行业的发展的趋势、现状与挑战
  10. 泰山OFFICE技术讲座:使用字体斜体的四种情形