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 相关文章推荐
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
jquery 最简单的属性菜单
Oct 08 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
Aug 11 Javascript
js实现跨域的4种实用方法原理分析
Oct 29 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
May 29 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
Dec 09 Javascript
Vue + iView实现Excel上传功能的完整代码
Jun 22 Vue.js
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
数据库的日期格式转换
2006/10/09 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
详解VUE中v-bind的基本用法
2017/07/13 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
vue中v-for循环给标签属性赋值的方法
2018/10/18 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
在Python中marshal对象序列化的相关知识
2015/07/01 Python
Python编程对列表中字典元素进行排序的方法详解
2017/05/26 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
中学生校园广播稿
2014/01/16 职场文书
有多年工作经验的自我评价
2014/03/02 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
需求分析说明书
2014/05/09 职场文书
常务副总经理任命书
2014/06/05 职场文书
2016年禁毒宣传活动总结
2016/04/05 职场文书