• 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/

  • 相关阅读:
    物联网需要自己的专有操作系统
    基于visual Studio2013解决C语言竞赛题之0201温度转换
    基于visual Studio2013解决C语言竞赛题之前言
    物联网操作系统再思考:建设更加主动的网络,面向连接一切的时代
    经典排序算法分析和代码-下篇
    Windows XP硬盘安装Ubuntu 12.04双系统图文详解
    Eclipse 编码区-保护色-快捷大全
    Android最新源码4.3下载-教程 2013-11
    Windows XP硬盘安装Ubuntu 12.04双系统图文详解
    惠威的M200MK3的前级电子分频板
  • 原文地址:https://www.cnblogs.com/changjianqiu/p/4323061.html
Copyright © 2020-2023  润新知