JavaScript事件基础知识总结【思维导图】

张晓天100 发布于:2015-11-02 16:29 栏目:转载 浏览:484 评论:0
点击查看大图

描述:JavaScript事件基础知识总结【思维导图】

图片:wdwd5612.png

JavaScript事件基础知识总结【思维导图】

另外附上来自Nicholas C.Zakas《JavaScript高级程序设计 第3版》中的跨浏览器兼容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);
        } else {
            element["on" + type] = handler;
        }
    },
     
    //移除事件
    removeHandler: function(element, type, handler){
        if (element.removeEventListener){
            element.removeEventListener(type, handler, false);
        } else if (element.detachEvent){
            element.detachEvent("on" + type, handler);
        } else {
            element["on" + type] = null;
        }
    },
     
    //获取事件
    getEvent: function(event){
        return event ? event : window.event;
    },
     
    //获取事件名称
    getTarget: function(event){
        return event.target || event.srcElement;
    },
        
    //获取鼠标键
    getButton: function(event){
        //DOM2中检测是否有MouseEvents模块
        if (document.implementation.hasFeature("MouseEvents", "2.0")){
            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;   //中键
            }
        }
    },
        
    //获得按键编码值
    getCharCode: function(event){
        if (typeof event.charCode == "number"){
            return event.charCode;
        } else {
            return event.keyCode;
        }
    },
        
    /*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){
            return event.toElement;
        } else if (event.fromElement){
            return event.fromElement;
        } else {
            return null;
        }
        
    },
        
    //获取鼠标滚轮mousewheel事件
    getWheelDelta: function(event){
        if (event.wheelDelta){
            return (client.engine.opera && client.engine.opera < 9.5 ? -event.wheelDelta : event.wheelDelta);
        } else {
            return -event.detail * 40;
        }
    },
        
    //取消事件的默认行为,如果cancelable是true,则可以使用这个方法;
    //如:点击超链接时阻止其访问herf属性实现跳转
    preventDefault: function(event){
        if (event.preventDefault){
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },
        
    //取消事件的进一步捕获或冒泡。如果bubbles为true则可以使用这个方法;
    stopPropagation: function(event){
        if (event.stopPropagation){
            event.stopPropagation();
        } else {
            event.cancelBubble = true;
        }
    },
     
    //获取剪切板文本
    getClipboardText: function(event){
        var clipboardData =  (event.clipboardData || window.clipboardData);
        return clipboardData.getData("text");
    },
     
    //设置剪切板文本
    setClipboardText: function(event, value){
        if (event.clipboardData){
            event.clipboardData.setData("text/plain", value);
        } else if (window.clipboardData){
            window.clipboardData.setData("text", value);
        }
    }
     
};
游客

返回顶部