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 相关文章推荐
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
关于js类的定义
Jun 28 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
Jan 24 Javascript
JS动画效果打开、关闭层的实现方法
May 09 Javascript
Jquery和JS获取ul中li标签的实现方法
Jun 02 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
webpack 4.0.0-beta.0版本新特性介绍
Feb 10 Javascript
JS实现的文字间歇循环滚动效果完整示例
Feb 13 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
Nov 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
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
用php来限制每个ip每天浏览页面数量的实现思路
2015/02/24 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
jquery多选项卡效果实例代码(附效果图)
2013/03/23 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
深入探寻javascript定时器
2015/01/02 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
详解node HTTP请求客户端 - Request
2017/05/05 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
python pyheatmap包绘制热力图
2018/11/09 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
各营销点岗位职责范本
2014/03/05 职场文书
幼儿园三八妇女节活动方案
2014/03/11 职场文书
一年级学生评语大全
2014/04/21 职场文书
学校搬迁方案
2014/06/15 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers