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)