mousewheel事件的兼容方法
在垂直方向上滚动页面时,会触发mousewheel事件,这个事件会在任何元素上触发,最终都会冒泡到document(IE8)或window(IE9+及其他主流现代浏览器)对象。
在给元素指定mousewheel事件时,FireFox不支持使用onmousewheel,而是支持一个名为DOMMouseScroll的事件。DOMMouseScroll与onmousewheel的区别是,前者只能通过DOM2级事件处理程序的方法,即addEventListener()方法添加事件处理程序,而后者可以使用DOM0级(element.onmousewheel=function() {})和DOM2级事件处理程序的方法添加事件处理程序。
为了在不同浏览器中能使用一样的代码,我想了一个给元素添加mousewheel事件的通用方法。下面是代码:
function addMouseWheelEvent(element,func) {
if (typeof element.onmousewheel == "object") {
element.onmousewheel = function() {
func();
};
}
if (typeof element.onmousewheel == "undefined") {
element.addEventListener("DOMMouseScroll",func,false);
}
}
方法的名称是addMouseWheelEvent,该方法接收两个参数:element表示要添加mousewheel事件的元素节点,func表示作为事件处理程序的函数。使用方法是直接调用该函数并出入适当的参数即可:addMouseWheelEvent(element,func);
原理是:在支持onmousewheel的浏览器中element.onmousewheel的typeof值为object,在不支持onmousewheel的浏览器中element.onmousewheel的typeof值为undefined。可以根据typeof值的不同对浏览器进行能力检测,从而应用不同的添加事件处理程序的方法。
经过测试该方法在chrome、IE11和FireFox中能正常使用。
补充:
在给元素指定mousewheel事件时,对应的event对象会有一个wheelDelta属性(规范中的属性),当用户向前滚动滚轮时,其值是120的整数倍,当用户向后滚动滚轮时,其值是-120的整数倍。当然在FireFox中这个属性不叫wheelDelta,而是叫detail,当用户向前滚动滚轮时,detail的值是-3的整数倍,当用户向后滚动滚轮时,detail的值是3的整数倍,正负号与wheelDelta的值是相反的。
2017-5-12更新:现在看当初自己写的这个方法,实在是不怎么样。根据判断条件都用DOM2级添加事件的方法,还要传入事件对象,这样更合理。
mousewheel事件的兼容方法的更多相关文章
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- DOM中事件绑定补充方法
先将上一篇文章中提到的为元素增加事件的方法和移除事件的方法拿过来: <span style="font-size:18px;">//跨浏览器添加事件 function ...
- JS事件及其兼容用法
JavaScript与HTML之间的交互是通过事件实现的.事件,就是文档或浏览器窗口中发生的一些特定的交互瞬间. 1.事件流:描述的是从页面中接收事件的顺序. IE提出的事件冒泡流:事件开始由最具体的 ...
- jquery扩展鼠标mousewheel事件
最近项目中要有个鼠标在图片上滚动实现图片放大和缩小的得到功能,隐约的记得好像记得有个 mousewheel 事件,可以实现需求,于是乎,开始在网上查找这一方法,但是,出乎意料的结果,各浏览器对此方法有 ...
- JS--事件对象中部份浏览器不兼容方法
测试时主要用的浏览器是Firefox 28.0.IE11.IE8.Chrome 34.0 一.什么是事件对象:当触发某个事件的时候,会产生一个事件对象,这个对象包含着所有的与事件有关的信息,包括导致 ...
- AJAX原理解析与兼容方法封装
AJAX常用参数 AJAX对象兼容 AJAX对象方法与属性 AJAX封装兼容方法源码 AJAX全称Asynchronous JavaScript and XML(异步的JavaScript与XML), ...
- 事件对象,arguments、事件的兼容问题
一.事件对象 1.每个元素身上是天生存在的,不需要我们去定义,只需要我们给这个事件绑定一个方法,当事件触发的时候,就会执行这个方法 2.事件绑定的方法: (1).DOM0级绑定:div . oncli ...
- [WPF]UserControl的MouseWheel事件触发
用户控件: <UserControl> <Grid> <TextBox x:Name="textBlock" HorizontalAlignment= ...
- jQuery绑定以及解除时间方法总结,以及事件触发的方法
一 off()和on() $("obj").on(event,[sesect],[data],fn);一般情况下参数只有两个,事件以及事件的处理函数 ...
随机推荐
- 2016/11/16 周三 <Web SQL Database基本使用方法(入门) >
<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...
- 在 IIS 7.5 中,应用程序池有两种运行模式:集成模式和经典模式。
应用程序池模式会影响服务器处理托管代码请求的方式. 如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求. 如果托管应用程序在采用经 ...
- sessionStorage/localStorage 本地存储
if(!sessionStorage.getItem('vote2')||sessionStorage.getItem('vote2')==NaN)sessionStorage.setItem(' ...
- Eclipse中自动提示的方法参数都是arg0,arg1的解决方法
Eclipse中自动提示的方法参数都是arg0,arg1,就不能根据参数名来推断参数的含义,非常不方便. 解决方法:Preferences->Java->Installed JREs,发现 ...
- 通过html和css做出下拉导航栏的效果
通过观察了百度的首页,对于更多产品一栏,觉得可以不涉及JS便可写出下拉导航栏的效果 1.先设计出大体的框架 <div class="nav"> <ul> & ...
- 用rem实现WebApp自适应的优劣分析
关于rem实现屏幕自适应布局的讨论还是比较多的,刚好我也看到使用rem实现自适应的web app,所以也来凑下热闹. 说起rem,免不了要联系到em.px,这里简单提提他们的定义和特点. 1. px: ...
- Angular遇上CoffeeScript - NgComponent封装
CoffeeScript是基于JavaScript的一门扩展小巧语言,它需要编译成JavaScript,然后再运行与浏览器或者Nodejs平台.JavaScript由于商业原因10天时间就匆忙诞生,所 ...
- 3dmax模型制作备忘录
md2导出: http://thegreystudios.com/blog/?p=278 http://wenku.baidu.com/view/4d5652e2524de518964b7d89.ht ...
- LINUX 下安装一些东西,PHP Apach SSL 等
首先下载apache sourcecode:http://www.apache.org/dyn/closer.cgi configure: error: Cannot find ldap librar ...
- Echarts使用
Echarts使用 |版权声明:此文为本人原创,望尊重原创 前言: 和朋友聊天的过程中,朋友提到了Echarts.我当时不知道那个是用来做什么的.回到家我就百度了,开始自己看文档学习.本文是自 ...