JavaScript 滚轮事件使用说明


Posted in Javascript onMarch 07, 2010

不过遗憾的是各浏览器都不尽相同。

一) 事件名称不相同
IE, KHTML(Safari, Chrome), Opera对应的事件名称是 "mousewheel"。而 Gecko(Firefox, Netscape) 对应的事件名称是 "DOMMouseScroll"。

二) 事件对象的属性不一样
有时我们需要知道用户是向上滚了还是向下滚了。例如我们有一个响应滚动事件的函数:

function wheelHandle(e) { 
if(e.wheelDelta) {// IE, KHTML, Opera 
alert(e.wheelDelta > 0 ? '向上滚' : '向下滚'); 
} else { // Gecko 
alert(e.detail < 0 ? '向上滚' : '向下滚'); 
} 
}

IE, KHTML 支持 e.wheelDelta ,大于 0 为向上滚动,小于 0 为向下滚动。Gecko 支持 e.detail,小于 0 为向上滚动,大于 0 为向上滚动,跟前面的相反。而 Opera 比较牛,两种都支持。
下面给出一个注册滚轮事件的函数做参考:
/** 
* 注册滚轮事件函数 
* @param element : 注册的事件对象 
* @param wheelHandle : 注册事件函数 
*/ 
function addScrollListener(element, wheelHandle) { 
if(typeof element != 'object') return; 
if(typeof wheelHandle != 'function') return; 
// 监测浏览器 
if(typeof arguments.callee.browser == 'undefined') { 
var user = navigator.userAgent; 
var b = {}; 
b.opera = user.indexOf("Opera") > -1 && typeof window.opera == "object"; 
b.khtml = (user.indexOf("KHTML") > -1 || user.indexOf("AppleWebKit") > -1 || user.indexOf("Konqueror") > -1) && !b.opera; 
b.ie = user.indexOf("MSIE") > -1 && !b.opera; 
b.gecko = user.indexOf("Gecko") > -1 && !b.khtml; 
arguments.callee.browser = b; 
} 
if(element == window) 
element = document; 
if(arguments.callee.browser.ie) 
element.attachEvent('onmousewheel', wheelHandle); 
else 
element.addEventListener(arguments.callee.browser.gecko ? 'DOMMouseScroll' : 'mousewheel', wheelHandle, false); 
}

注册一个监听事件:
var display = document.getElementById('display'); 
function wheelHandle(e) { 
if(e.wheelDelta) {// IE, KHTML, Opera 
display.innerHTML = (e.wheelDelta > 0 ? '上' : '下'); 
} else { // Gecko 
display.innerHTML = (e.detail < 0 ? '上' : '下'); 
} 
} 
addScrollListener(window, wheelHandle);
Javascript 相关文章推荐
JavaScript遍历table表格中的某行某列并打印其值
Jul 08 Javascript
jquery图片切换插件
Mar 16 Javascript
json的使用小结
Jun 08 Javascript
js中window.open的参数及注意注意事项
Jul 06 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
Aug 06 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 Javascript
使用webpack打包后的vue项目如何正确运行(express)
Oct 26 Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
Dec 20 Javascript
VUE 解决mode为history页面为空白的问题
Nov 01 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 Javascript
javascript下4个跨浏览器必备的函数
Mar 07 #Javascript
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 #Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 #Javascript
javascript实现面向对象类的功能书写技巧
Mar 07 #Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
Mar 07 #Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
Mar 05 #Javascript
Jquery Validation插件防止重复提交表单的解决方法
Mar 05 #Javascript
You might like
PHP 身份验证方面的函数
2009/10/11 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
PHP实现页面静态化深入讲解
2021/03/04 PHP
javascript call方法使用说明
2010/01/11 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
详解python 发送邮件实例代码
2016/12/22 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Python中文编码知识点
2019/02/18 Python
python实现桌面气泡提示功能
2019/07/29 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
tensorboard显示空白的解决
2020/02/15 Python
python读取excel数据并且画图的实现示例
2021/02/08 Python
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
初中学生期末评语
2014/04/24 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL