一、前言

学习了javascript事件后,个人总结归纳了跨浏览器事件对象类库,方便以后使用,现分享给大家。

二、事件对象封装

将对浏览器事件对象的操作封装成eventObject.js方便调用

//跨浏览器事件对象的操作
var EventUtil = {
//绑定事件处理程序
addHandler : function(element, type, handler){
if(element.addEventListener){//DOM2级事件处理程序
element.addEventListener(type, handler, false);//false表示的是冒泡阶段调用事件处理程序
}else if(element.attachEvent){//IE事件处理程序
element.attachEvent('on' + type, handler);
}else {//DOM0级事件处理程序
element['on' + type] = handler;
}
},
//取消绑定的事件处理程序
removeHandler : function(element, type, handler){
if(element.removeEventListener){
element.removeEventListener(type, handler, false);
}else if(element.detachEvent){
element.datachEvent('on' + type, handler);
}else {
element['on' + type] = null;
}
},
//获取事件对象
getEvent : function(event){
return event || window.event;
},
//获取目标元素对象
getTarget : function(event){
return event.target || event.srcElement;//event.target表示获取非IE元素对象,event.srcElement表示获取IE元素对象
},
//阻止事件的默认行为
preventDefault : function(event){
if(event.preventDefault){//非IE下阻止事件的默认行为
event.preventDefault();
}else {
event.returnValue = false;//IE下阻止事件的默认行为
}
},
//阻止事件的冒泡
stopPropagation : function(event){
if(event.stopPropagation){//非IE下阻止事件冒泡
event.stopPropagation();
}else {
event.cancelBubble = true;//IE下阻止事件冒泡
}
},
//获取鼠标按下的键位
getButton : function(event){
if(document.implementation.hasFeature("MouseEvents", "2.0")){//DOM2中检测是否有MouseEvents模块
return event.button;
// var k = event.button;
// switch(k){
// case 0:
// return "0:表示左键";
// case 1:
// return "1:表示中键";
// case 2:
// return "2:表示右键";
// }
//IE6,7,8 左键:1,中键:4,右键:2;
//Chrome,FF,IE9+ 左键:0,中键:1,右键:2;
}else {
switch(event.button){//IE
case 0 :
case 1 :
case 3 :
case 5 :
case 7 :
return 0;//左键
case 2 :
case 6 :
return 2;//右键
case 4 :
return 1;//中键
}
}
},
//鼠标移入移出时获取相关元素对象
/*event对象的relatedTarget属性提供了相关元素的信息,这个属性只对于mouseover和mouseout事件才包含值;
*对于其他事件,这个属性的值是null。
*IE不支持relatedTarget属性,但提供了保存着同样信息的不同属性。
*在mouseover事件触发时,IE的fromElement属性中保存相关元素;
*在mouseout事件触发时,IE的toElement属性中保存相关元素。
*/
getRelatedTarget : function(event){
if(event.relatedTarget){
return event.relatedTarget;
}else if(event.toElement){//mouseout事件触发
return event.toElement;
}else if(event.fromElement){//mouseover事件触发
return event.fromElement;
}else {
return null;
}
}
};

三、总结

此类库参考了《JavaScript高级程序设计 第3版》相关内容,如果各位有更好的有关事件对象操作的类库,希望能分享交流。

文中有误导大家的地方,希望大伙海涵并给予指正。如果您觉得文章对您有所帮助,您的留言和推荐将对我是莫大的鼓舞!

如需转载本文,请注明来源: http://www.cnblogs.com/changjianqiu/

javascript跨浏览器事件对象类库的更多相关文章

  1. js跨浏览器事件对象、事件处理程序

    项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节 ...

  2. JavaScript中的事件对象

    JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...

  3. 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解

    <javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = { // ...

  4. javascript event(事件对象)详解

    javascript event(事件对象)详解   1. 事件对象     1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...

  5. Javascript跨浏览器的事件对象

    一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...

  6. JavaScript跨浏览器处理事件以及相关对象

    主流的浏览器和IE浏览器在处理事件和事件对象上是有所区别的,我们一般会通过EventUtil进行封装,这样,就可以正常的跨浏览器处理事件了,本文的主要内容总结自<JavaScript高级程序设计 ...

  7. JavaScript跨浏览器绑定事件函数的优化

    JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...

  8. Javascript中的事件对象和事件类型

    接上次看JS的事件冒泡和捕获,所以顺带就把事件相关的知识都看完好了 而且想到一个好的学习方法,第一天自己看,第二天把前一天学习的东西写下来,一方面可以当复习,一方面当重新整理并且分享 事件对象 事件处 ...

  9. JavaScript 中的事件对象(读书笔记思维导图)

    在触发 DOM 上的某个事件时,会产生一个事件对象 event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对象中,会包含 ...

随机推荐

  1. hdu6071(最短路)

    hdu6071 题意 四个点连接形成一个环,给出相邻两个点的距离,求从点 \(2\) 出发再回到 \(2\) 的路程大于等于 \(K\) 的最小值. 分析 首先我们让 \(w=min(d12, d23 ...

  2. 【2-SAT】【并查集】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem

    再来回顾一下2-SAT,把每个点拆点为是和非两个点,如果a能一定推出非b,则a->非b,其他情况同理. 然后跑强连通分量分解,保证a和非a不在同一个分量里面. 这题由于你建完图发现都是双向边,所 ...

  3. 【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组

    对于一对数(p,q),若它们的gcd为x0,lcm为y0, 则:p*q/x0=y0,即q=x0*y0/p, 由于p.q是正整数,所以p.q都必须是x0*y0的约数. 所以O(sqrt(x0*y0))地 ...

  4. Java高级架构师(一)第09节课:搭建基础的开发环境

  5. 键盘事件OnKeyListener

    1.效果图:就是在文本框中输入A,则显示A,输入B,则显示B.... (1)activity_main.xml <?xml version="1.0" encoding=&q ...

  6. 现在就可以使用的5个 ES6 特性

    小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...

  7. Android ViewStub的使用方法

    大家写项目的时候肯定会有一些东西提前写好,可是不到一定条件是不想让它显示出来的.我们可能的做法就是让它View.GONE 或View.INVISIBLE等到一定条件了在代码里面这设置View.VISI ...

  8. HA分布式集群一hadoop+zookeeper

    一:HA分布式配置的优势: 1,防止由于一台namenode挂掉,集群失败的情形 2,适合工业生产的需求 二:HA安装步骤: 1,安装虚拟机 1,型号:VMware_workstation_full_ ...

  9. Can we say objects have attributes, states and behaviors?

    15down votefavorite 3 I was reading through Oracle's introduction to OOP concepts and I came across ...

  10. 配置git账号和密码

    最开始启动的时候 配置用户名和用户邮箱,安装完git第一件要做的事情! git config --global uesr.name "Sunnshino" git config - ...