javascript跨浏览器事件对象类库
一、前言
学习了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跨浏览器事件对象类库的更多相关文章
- js跨浏览器事件对象、事件处理程序
项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节 ...
- JavaScript中的事件对象
JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有 ...
- 【前端】跨浏览器事件处理程序EventUtil.js个人注释及详解
<javascript高级程序设计>跨浏览器事件处理程序EventUtil.js个人注释 EventUtil.js // 跨浏览器事件处理程序封装 var EventUtil = { // ...
- javascript event(事件对象)详解
javascript event(事件对象)详解 1. 事件对象 1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...
- Javascript跨浏览器的事件对象
一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...
- JavaScript跨浏览器处理事件以及相关对象
主流的浏览器和IE浏览器在处理事件和事件对象上是有所区别的,我们一般会通过EventUtil进行封装,这样,就可以正常的跨浏览器处理事件了,本文的主要内容总结自<JavaScript高级程序设计 ...
- JavaScript跨浏览器绑定事件函数的优化
JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...
- Javascript中的事件对象和事件类型
接上次看JS的事件冒泡和捕获,所以顺带就把事件相关的知识都看完好了 而且想到一个好的学习方法,第一天自己看,第二天把前一天学习的东西写下来,一方面可以当复习,一方面当重新整理并且分享 事件对象 事件处 ...
- JavaScript 中的事件对象(读书笔记思维导图)
在触发 DOM 上的某个事件时,会产生一个事件对象 event,这个对象中包含着所有与事件有关的信息.包括导致事件的元素.事件的类型以及其他与特定事件相关的信息.例如,鼠标操作导致的事件对象中,会包含 ...
随机推荐
- C++—揭秘大牛博客一些不同凡人的写法
天下之大,无奇不有,C++也是这样,今天小编来盘点几个有意思的代码,看看你认识几个?以后见到之后千万别装不认识. 一.基础篇——不一样的输出 1.cerr 输出 cout和cerr究竟有什么不同?这也 ...
- BZOJ 1852 [MexicoOI06]最长不下降序列(贪心+DP+线段树+离散化)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1852 [题目大意] 给你N对数A1,B1……An,Bn.要求你从中找出最多的对, 把它 ...
- python3 Django框架报错(备忘录)
这篇博客主要总结的学习Django框架中,遇到的报错如何去解决问题: 1.decimal.InvalidOperation: decimal.InvalidOperation: [<class ...
- openresty的ngx.timer.at
openresty的ngx.timer.at真是个强大的方法. 例如某些函数不可以在一些NGINX的执行阶段使用时,可以ngx.timer.at API 创建一个零延迟的timer,在timer中去处 ...
- 【MySQL笔记】SQL语言四大类语言
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句, ...
- C# 6.0语法新特性体验(二)
之前我在文章通过Roslyn体验C# 6.0的新语法中介绍了一些C# 6.0的语法特性,现在随着Visual Studio 14 CTP3的发布,又陆续可以体验一些新的特性了,这里简单的介绍一下之前没 ...
- [HTML/CSS]uploadify自定义按钮样式
概述 在项目中经常用到uploadify上传插件,但是FLASH按钮的外观往往跟我们网页的设计的主题色不太搭配.这时就需要对其样式进行修改. 样式文件是uploadify.css. 打开这个文件后,你 ...
- 推荐10个免费的HTML编辑器
如果你想开发一个网站,你肯定想要一个很棒的HTML编辑器,一个好的编辑器可以让代码更加整齐格式化,前端显示也会更好,从而提升你的工作效率.下面就为开发者推荐10个免费的HTML编辑器,你可以尝试使用. ...
- nagios系列教程地址
http://www.sosidc.com/sort/10/page/3 http://www.sosidc.com/sort/10/page/2 http://www.sosidc.com/sort ...
- 算法导论-顺序统计-快速求第i小的元素
目录 1.问题的引出-求第i个顺序统计量 2.方法一:以期望线性时间做选择 3.方法二(改进):最坏情况线性时间的选择 4.完整测试代码(c++) 5.参考资料 内容 1.问题的引出-求第i个顺序统计 ...