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/

时间: 2024-10-05 21:59:04

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

javascript 跨浏览器事件对象、阻止默认事件、阻止冒泡兼容写法

var EventUtil = { getEvent: function(event){ return event ? event : window.event; }, getTarget: function(event){ return event.target || event.srcElement; }, preventDefault: function(event){ if (event.preventDefault){ event.preventDefault(); } else {

跨浏览器事件对象代码

<script type="text/javascript"> var EventUtil = { addHandler:function(element,type,handler){ if (element.addEventListener) { element.addEventListener(type,handler,false); }else if(element.attachEvent){ element.attachEvent("on"+ty

跨浏览器事件对象

var EventUtil = { addHandler: function(elem,type,handler){ if (elem.addEventListener) { elem.addEventListener(type, handler, false); }else if(elem.attachEvent){ elem.attachEvent('on'+type,handler); }else{ elem["on"+type] = handler; } }, removeHa

javascript跨浏览器事件绑定

//跨浏览器事件绑定 function addEvent(obj,type,fn){ //obj目标对象, type事件类型 注意是:"load" ,fn函数回调 if (typeof obj.addEventListener !="undefined"){ //W3C方法 obj.addEventListener(type,fn,false); } else if (typeof obj.attachEvent !="undefined"){

跨浏览器事件对象封装

封装一个能够隔离浏览器差异的JavaScript库EventUtil,主要是使用能力检测. var EventUtil={ addHandler:function(element,type,handler){ if(element.addEventListener){ element.addEventListener(type,handler,false); }else if(element.attachEvent){ element.attachEvent('on'+type,handler)

Event Handler 事件处理程序 2 ---跨浏览器事件对象《高程3》

0 Event Object导论 支持DOM0.DOM2的浏览器和IE浏览器实现事件处理程序的不同,除了体现在添加事件处理程序的不同上,还体现在event对象的实现差异上,包括具体的属性和方法.在触发DOM上的某个事件时,都会产生一个event对象,这个对象包含着所有与事件有关的信息.一旦事件处理程序执行完成,event对象就会被销毁.所有浏览器对event的支持方式包括:DOM事件对象和IE事件对象. 1.1 DOM0和DOM2支持的Event对象(针对IE之外的浏览器) 兼容 DOM 的浏览

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

项目中有时候会不用jquery这么好用的框架,需要自己封装一些事件对象和事件处理程序,像封装AJAX那样:这里面考虑最多的还是浏览器的兼容问题,原生js封装如下:var EventUtil={ //节点.事件名.事件处理函数 addHanler:function(element,type,handler){ if(element.addEventListener){ element.addEventListener(type,handler,false);//这里一个参数为false意为在事件冒

常用跨浏览器事件封装

1 /** 2 * @author [xiaoruo] 3 * [EventUtil 跨浏览器事件对象] 4 * @type {Object} 5 */ 6 var EventUtil = { 7 /** 8 * [addHandler 添加跨浏览器事件] 9 * @param {[Object]} element [事件对象] 10 * @param {[String]} type [事件类型] 11 * @param {[Function]} handler [事件函数] 12 */ 13

JavaScript中的事件对象

JavaScript中的事件对象 JavaScript中的事件对象是非常重要的,恐怕是我们在项目中使用的最多的了.在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有关的信息.下面将会讲到DOM中的事件对象.IE中的事件对象以及跨浏览器的事件对象三个部分. 对于事件处理程序,大家可以看我的博文<JavaScript中的五种事件处理程序>. 第一部分:DOM事件对象 兼容DOM的浏览器会将一个event对象传入到事件处理程序中,无论是HMTL特性.DOM0级还是