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 相关文章推荐
IE中直接运行显示当前网页中的图片 推荐
Aug 31 Javascript
JavaScript 保存数组到Cookie的代码
Apr 14 Javascript
20款超赞的jQuery插件 Web开发人员必备
Feb 26 Javascript
解决JS浮点数运算出现Bug的方法
Mar 12 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
Mar 08 Javascript
详解vue父子组件间传值(props)
Jun 29 Javascript
vue项目优化之通过keep-alive数据缓存的方法
Dec 11 Javascript
小程序实现录音上传功能
Nov 22 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
javascript实现页面的实时时钟显示示例
Aug 06 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缓存类代码(附详细说明)
2011/06/09 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
Javascript string 扩展库代码
2010/04/09 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
JS实现图片局部放大或缩小的方法
2016/08/20 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
Python爬虫常用库的安装及其环境配置
2018/09/19 Python
Django继承自带user表并重写的例子
2019/11/18 Python
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
了解AppleTalk协议吗
2014/04/01 面试题
房屋改造计划书
2014/01/10 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
计算机软件专业求职信
2014/06/10 职场文书
小学综合实践活动总结
2014/07/07 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
专项资金申请报告
2015/05/15 职场文书
实验心得体会范文
2016/01/25 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js