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 解析url的search方法
Feb 09 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
Feb 03 Javascript
Egret引擎开发指南之编译项目
Sep 03 Javascript
Js实现自定义右键行为
Mar 26 Javascript
JS onkeypress兼容性写法详解
Apr 27 Javascript
JavaScript 冒泡排序和选择排序的实现代码
Sep 03 Javascript
jQuery监听文件上传实现进度条效果的方法
Oct 16 Javascript
JavaScript评论点赞功能的实现方法
Mar 13 Javascript
jQuery实现表格冻结顶栏效果
Aug 20 jQuery
小程序云开发初探(小结)
Oct 24 Javascript
vue3.0 搭建项目总结(详细步骤)
May 20 Javascript
TypeScript实用技巧 Nominal Typing名义类型详解
Sep 23 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
dedecms系统常用术语汇总
2007/04/03 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
简单谈谈php浮点数精确运算
2016/03/10 PHP
javascript数组去掉重复
2011/05/12 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
jquery实现浮动在网页右下角的彩票开奖公告窗口代码
2015/09/04 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
python直接访问私有属性的简单方法
2016/07/25 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
2020/06/05 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
教师实习自我鉴定
2013/12/14 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
花坛标语大全
2014/06/30 职场文书
教师工作表现自我评价
2015/03/05 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
MySQL中varchar和char类型的区别
2021/11/17 MySQL