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 相关文章推荐
获取HTML DOM节点元素的方法的总结
Aug 21 Javascript
JavaScript的public、private和privileged模式
Dec 28 Javascript
style、 currentStyle、 runtimeStyle区别分析
Aug 01 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
May 23 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
JS判断变量是否为空判断是否null
Jul 25 Javascript
Javascript限制网页只能在微信内置浏览器中访问
Nov 09 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
Jan 19 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
Dec 04 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
代码详解Vuejs响应式原理
Dec 20 Javascript
如何通过javaScript去除字符串两端的空白字符
Feb 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
DOTA2 探索永无止境 玩家自创强悍插眼攻略
2020/04/20 DOTA
如何使用PHP往windows中添加用户
2006/12/06 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
PHP中file_get_contents高?用法实例
2014/09/24 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
AlertBox 弹出层信息提示框效果实现步骤
2010/10/11 Javascript
jquery 选项卡效果 新手代码
2011/07/08 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
用python编写第一个IDA插件的实例
2018/05/29 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
幼儿园教师培训方案
2014/02/04 职场文书
车队司机个人自我鉴定
2014/04/17 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
我在伊朗长大观后感
2015/06/16 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库