原生JS绑定滑轮滚动事件兼容常见浏览器


Posted in Javascript onJune 30, 2014

滑轮滚动页面的事件在网页特效中进场遇到,但是在不同浏览器下的实现方式又不同。下面我实现的方法,兼容常见浏览器。

function getData(event){ 
var e = event || window.event; 
//获取滚动距离(FF每次滚动 data为3或者-3,其他为120或者-120) 
var data = e.detail || e.wheelDelta; 
alert(data); 
} 

//IE之外的绑定事件方法 
if(document.addEventListener && !document.attachEvent) 
{ 
document.addEventListener('mousewheel',getData); 
//FF绑定滚动事件 
document.addEventListener('DOMMouseScroll',getData); 
} 
//IE 
else if(document.attachEvent && !document.addEventListener){ 
document.attachEvent('onmousewheel',getData); 
}else{ 
window.onmousewheel = getData; 
}

代码中值得注意的地方:

1 为什么使用document.addEventListener && !document.attachEvent来区分IE?

attachEvent和detachEvent是IE特有的绑定事件和解绑事件的方法,只有在IE中存在此方法。但是在IE9+浏览器中有实现了较为通用的addEventListener方法来绑定事件。浏览器中有document.addEventListener 方法就可以排除不是IE8及其以下版本的,但是包括了IE9+浏览器,所以后面使用 &&!document.attachEvent来排除IE9+浏览器。

2 值得注意的就是在FF浏览器中没有mousewheel事件,触发滚动的时间是DOMMouseScroll。

3 还有一点值得注意的就是在使用addEventListener绑定事件的时候,事件名前面不加on,而在IE中使用attachEvent绑定事件的时候需要加上on。

Javascript 相关文章推荐
用jquery实现的模拟QQ邮箱里的收件人选取及其他效果(一)
Jan 06 Javascript
JS去除数组重复值的五种不同方法
Sep 06 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
vue使用vue-cli快速创建工程
Jul 28 Javascript
vue router仿天猫底部导航栏功能
Oct 18 Javascript
jQuery操作选中select下拉框的值代码实例
Feb 07 jQuery
关于AngularJS中几种Providers的区别总结
May 17 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 Javascript
js实现的点击div区域外隐藏div区域
Jun 30 #Javascript
js实现特定位取反原理及示例
Jun 30 #Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
Jun 30 #Javascript
jQuery+ajax实现鼠标单击修改内容的思路
Jun 29 #Javascript
html文本框提示效果的示例代码
Jun 28 #Javascript
使用delegate方法为一个tr标签加一个链接
Jun 27 #Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 #Javascript
You might like
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
js实现聊天对话框
2020/02/08 Javascript
Python实现学生成绩管理系统
2020/04/05 Python
python实战串口助手_解决8串口多个发送的问题
2019/06/12 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
商务英语本科生的自我评价分享
2013/11/15 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
时尚女魔头观后感
2015/06/04 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js