Events适配器

来源:互联网 发布:nginx代理tomcat配置 编辑:程序博客网 时间:2024/05/16 00:27
var fix = function(event) {    var props = "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget "+"data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY "+"prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement"+" view wheelDelta which".split(" ");    // 存储原始事件对象的副本    // 和“clone”,设置只读属性    var originalEvent = event;    event = {        originalEvent: originalEvent    };    for (var i = props.length, prop; i;) {        prop = props[--i];        event[prop] = originalEvent[prop];    }   //添加的preventDefault 取消事件的默认动作。和stopPropagation,停止事件的传播 因为它们不会在工作 在 克隆 的event  event.preventDefault = function() {      if (this.originalEvent.preventDefault)           this.originalEvent.preventDefault();      this.originalEvent.returnValue = false;  };  event.stopPropagation = function() {      if (this.originalEvent.stopPropagation)          this.originalEvent.stopPropagation();      //原始事件的cancelBubble属性设置为true(IE)       this.originalEvent.cancelBubble = true;  };  event.timeStamp = event.timeStamp || +new Date    // 如果有必要,修复target属性,    if (!event.target) {        event.target = event.srcElement || document;    }    // 检查target是否为 textnode 节点(safari)    if (event.target.nodeType === 3) {        event.target = event.target.parentNode;    }    // relatedTarget 返回指针刚刚离开的元素(不支持 IE)。fromElement 支持 IE    if (!event.relatedTarget && event.fromElement) {        event.relatedTarget = event.fromElement === event.target ? event.toElement: event.fromElement;    }    // 计算pageX/ y, 如果没有,clientX/ Y提供    if (event.pageX == null && event.clientX != null) {        var doc = document.documentElement,        body = document.body;        event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);        event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);    }    // Add which for key events    if (event.which == null && (event.charCode != null || event.keyCode != null)) {        event.which = event.charCode != null ? event.charCode: event.keyCode;    }    // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)    if (!event.metaKey && event.ctrlKey) {        event.metaKey = event.ctrlKey;    }    // Add which for click: 1 === left; 2 === middle; 3 === right    // Note: button is not normalized, so don't use it    if (!event.which && event.button !== undefined) {        event.which = (event.button & 1 ? 1 : (event.button & 2 ? 3 : (event.button & 4 ? 2 : 0)));    }    return event;}document.onclick=getE;function getE(e){ e=fix(e);   alert(e.pageX);}//IEdocument.onclick= function (){ e=fix(event);   alert(e.pageX);}


 

0 0